我会假设有一个简单的 LINQ 查询可以做到这一点,我只是不完全确定如何。
鉴于这段代码:
class Program { static void Main(string[] args) { List<Person> peopleList1 = new List<Person>(); peopleList1.Add(new Person() { ID = 1 }); peopleList1.Add(new Person() { ID = 2 }); peopleList1.Add(new Person() { ID = 3 }); List<Person> peopleList2 = new List<Person>(); peopleList2.Add(new Person() { ID = 1 }); peopleList2.Add(new Person() { ID = 2 }); peopleList2.Add(new Person() { ID = 3 }); peopleList2.Add(new Person() { ID = 4 }); peopleList2.Add(new Person() { ID = 5 }); } } class Person { public int ID { get; set; } }
我想执行一个 LINQ 查询来给我所有peopleList2不在peopleList1.
peopleList2
peopleList1
这个例子应该给我两个人(ID = 4 & ID = 5)
这可以使用以下 LINQ 表达式来解决:
var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));
通过 LINQ 表达这一点的另一种方式,一些开发人员发现它更具可读性:
var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));
警告: 如评论中所述,这些方法要求 O(n*m) 操作。这可能很好,但可能会引入性能问题,尤其是在数据集非常大的情况下。如果这不能满足您的性能要求,您可能需要评估其他选项。但是,由于所述要求是针对 LINQ 中的解决方案,因此此处不探讨这些选项。与往常一样,根据您的项目可能具有的性能要求评估任何方法。