LINQ确定集合中对象的属性是否存在于其他集合中

时间:2013-03-11 02:11:51

标签: c# linq

假设我有一组Person对象 -

public class Person
{
  public string Firstname { get; set; }
  public string Surname { get; set; }
}

现在让我说我有一个不同的收藏品,拿着我邀请参加聚会的家庭的姓氏 -

var guestlist = new List<string> {"Stark", "Wayne"};

我怎样才能使用linq(最好是基于lamba,但这并不重要)只能拔出Stark或Wayne家族的成员?即。我希望最终得到另一个(第三个)收藏品,而不只是表明我的第一个收藏品包含Wayne或Stark家族成员。

4 个答案:

答案 0 :(得分:4)

试试这个:

var invited = persons.Where(p => guestlist.Contains(p.Surname));

答案 1 :(得分:2)

此操作在概念上是一个连接。它是从两个不同的集合中“匹配”的对象。

var query = from person in people
    join name in guestlist 
    on person.Surname equals name
    select person;

请注意,当两个集合的大小都很小时,所有其他涉及在人员列表中的每个项目的名称列表上使用Contains的解决方案都会有效,但解决方案不能很好地扩展因为你被迫为每个项目进行线性搜索 ,所以对于更大的集合来说。正确实现连接(LINQ会这样做)会将访客列表放入可以更有效搜索的集合中。

答案 2 :(得分:1)

我会试试这个:

var peopleList = GetPeopleList();
var guestList = new List<string> {"Stark", "Wayne"};
var matchList = peopleList.Where(o => guestList.Contains(o));

答案 3 :(得分:1)

var result = people.Where(x => guestlist.Contains(x.Surname));