假设我有一组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家族成员。
答案 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));