2

假设我有一组 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 家族的成员?IE。我想结束另一个(第三个)收藏,而不仅仅是表明我的第一个收藏包含韦恩或斯塔克家族成员。

4

4 回答 4

4

试试这个 :

var invited = persons.Where(p => guestlist.Contains(p.Surname));
于 2013-03-11T02:17:26.930 回答
2

从概念上讲,此操作是联接。它匹配来自两个不同集合的“属于”在一起的对象。

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

请注意,Contains当两个集合的大小都很小时,涉及在人员列表中的每个项目的名称列表上使用的所有其他解决方案都将起作用,但是对于较大的集合,该解决方案根本无法很好地扩展。被迫对每个项目进行线性搜索。如果正确实施(LINQ 会这样做),连接会将来宾列表放入可以更有效地搜索的集合中。

于 2013-03-11T03:32:59.887 回答
1

我会试试这个:

var peopleList = GetPeopleList();
var guestList = new List<string> {"Stark", "Wayne"};
var matchList = peopleList.Where(o => guestList.Contains(o));
于 2013-03-11T02:17:01.757 回答
1
var result = people.Where(x => guestlist.Contains(x.Surname));
于 2013-03-11T02:17:57.357 回答