如何针对另一个列表过滤一个列表?

时间:2015-01-20 15:39:11

标签: c# linq

我目前正在使用LINQ和一个自定义对象,说实话,我有点卡住了。我有一个代表一个人的自定义类。它看起来像这样:

private class Person
{
    private String Name;
    private String Firstname;

}

现在假设以下情况:我有两个PersonPerson1Person2数组。我想获得一个列表,列出那些具有相同的(在列表2中)名称但不存在于列表1中(对于其他属性)。

示例:

List<Person> Person1=new List<Person>(){new Person(){Name="Marley", Firstname="Bob"},
                                    new Person(){Name="Smith", Firstname="David"},
                                    new Person(){Name="Smith", Firstname="Thomas"},
                                    new Person(){Name="Flint", Firstname="John"}};

List<Person> Person2=new List<Person>(){new Person(){Name="Marley", Firstname="Bob"},
                                    new Person(){Name="Smith", Firstname="David"},
                                    new Person(){Name="Smith", Firstname="Thomas"},
                                    new Person(){Name="Smith", Firstname="Sandy"},
                                    new Person(){Name="Smith", Firstname="Catherine"},
                                    new Person(){Name="Flint", Firstname="John"},
                                    new Person(){Name="Simons", Firstname="Paul"},
                                    new Person(){Name="Flint", Firstname="Rachel"}};

在SQL中,查询将如下所示:

SELECT * FROM Person1 
WHERE Person1.NAME IN (SELECT Person2.Name FROM Person2
                       WHERE Person2.Name=Person1.Name 
                       AND Person1.Firstname<>Person2.Firstname)

结果将是Sandy / Catherine Smith和Rachel Flint(不是Paul Simons)

我怎么能在Linq做到这一点?

1 个答案:

答案 0 :(得分:0)

你说你想要所有人使用&#34;相同的名字但不是同一个名字&#34;但是你的sql查询查找具有相同名称但名字不同的所有

如果希望所有来自Person1Person2(根据Name)但FirstName不同的人:

var query = Person1
    .Where(p => Person2
        .Any(p2 => p2.Name == p.Name && p2.Firstname != p.Firstname));

如果您希望列表使用query.ToList(),如果您想要使用query.ToArray()数组。

如果您想要Person2

的全部内容
var query = Person2
        .Where(p2 => Person1
            .Any(p1 => p2.Name == p1.Name && p2.Firstname != p1.Firstname));
相关问题