使用 LINQ 获取一个 List<> 中不在另一个 List<> 中的项目

2024-03-24

我假设有一个简单的 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.

这个例子应该给我两个人(ID4和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));

Warning:正如评论中指出的,这些方法要求O(n*m)手术。这可能没问题,但可能会带来性能问题,尤其是在数据集很大的情况下。如果这不能满足您的性能要求,您可能需要评估其他选项。然而,由于规定的要求是针对 LINQ 中的解决方案,因此此处不探讨这些选项。与往常一样,根据您的项目可能具有的性能要求评估任何方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LINQ 获取一个 List<> 中不在另一个 List<> 中的项目 的相关文章

随机推荐