我目前正在使用LINQ和一个自定义对象,说实话,我有点卡住了。我有一个代表一个人的自定义类。它看起来像这样:
private class Person
{
private String Name;
private String Firstname;
}
现在假设以下情况:我有两个Person
(Person1
和Person2
数组。我想获得一个列表,列出那些具有相同的(在列表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做到这一点?
答案 0 :(得分:0)
你说你想要所有人使用&#34;相同的名字但不是同一个名字&#34;但是你的sql查询查找具有相同名称但名字不同的所有。
如果希望所有来自Person1
且Person2
(根据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));