C# LINQ确定集合中对象的属性是否存在于其他集合中
假设我有一组个人物品-C# LINQ确定集合中对象的属性是否存在于其他集合中,c#,linq,C#,Linq,假设我有一组个人物品- public class Person { public string Firstname { get; set; } public string Surname { get; set; } } 现在让我们假设我有一个不同的收藏,保存着我邀请参加聚会的家庭的姓氏- var guestlist = new List<string> {"Stark", "Wayne"}; var guestlist=新列表{“斯塔克”、“韦恩”}; 我怎样才能使用l
public class Person
{
public string Firstname { get; set; }
public string Surname { get; set; }
}
现在让我们假设我有一个不同的收藏,保存着我邀请参加聚会的家庭的姓氏-
var guestlist = new List<string> {"Stark", "Wayne"};
var guestlist=新列表{“斯塔克”、“韦恩”};
我怎样才能使用linq(最好是基于lamba的,但这并不重要)来仅仅吸引斯塔克或韦恩家族的成员?也就是说,我想以另一个(第三个)收藏结束,而不仅仅是表明我的第一个收藏中有韦恩或斯塔克家族成员。我会尝试以下方法:
var peopleList = GetPeopleList();
var guestList = new List<string> {"Stark", "Wayne"};
var matchList = peopleList.Where(o => guestList.Contains(o));
var peopleList=GetPeopleList();
var guestList=新列表{“斯塔克”、“韦恩”};
var matchList=peopleList.Where(o=>guestList.Contains(o));
试试这个:
var invited = persons.Where(p => guestlist.Contains(p.Surname));
这个操作在概念上是一个连接。它将两个不同集合中“属于”在一起的对象进行匹配
var query = from person in people
join name in guestlist
on person.Surname equals name
select person;
请注意,当两个集合的大小都很小时,所有涉及在人员列表中的每个项目的名称列表上使用Contains
的其他解决方案都会起作用,但对于较大的集合,解决方案根本无法很好地扩展,因为您必须对每个项目进行线性搜索。一个连接,如果实现得当(LINQ就是这样做的),将把来宾列表放入一个可以更高效地搜索的集合中
var query = from person in people
join name in guestlist
on person.Surname equals name
select person;