你如何在IEnumerable的子列表成员上使用(或者你可以使用)Linq Intersect方法?

时间:2012-05-02 22:49:45

标签: c# linq c#-3.0

我正在做以下事情......

//first I have a list of sports...
List<string> sports = new List<string> {"football","basketball"}

//then I have a list of partners who are offering that sport
List<Partner> = Partner.GetAvailablePartners();

//Partner is a type that has a List<string> Sports members.

现在我要做的是过滤我的合作伙伴列表,这样只有提供sports中包含的体育项目的合作伙伴才会知道如何。

我认为可以像这样使用Intersection扩展方法......

var filteredPartners = (List<Partner>) (from p in partners where p.Sports.Intersect(sports).Count()>0 select p);

但是我不行,我猜是因为我在一个成员列表而不是根列表上行事。

这可以用相交(或其他一些linq)方法完成吗?

赛斯

3 个答案:

答案 0 :(得分:1)

如果您确实需要List中的结果,则在LINQ语句的末尾调用ToList()。否则,您应该能够:

IEnumerable<Partner> partners = partners.Where(p => p.Sports.Intersect(sports).Count() == sports.Count);

...或在结果列表中:

List<Partner> partners = partners.Where(p => p.Sports.Intersect(sports).Count() == sports.Count).ToList();

答案 1 :(得分:0)

.Where()和所有其他lINQ方法返回IEnumerable<T>延迟迭代,而不是List<T>
您无法将它们转换为List<T>

如果您需要List<T>,请致电ToList()

答案 2 :(得分:0)

使用相交。

使用两个IEnumerables

的示例
var ids = original.Select(x => x.ID).Intersect(yourEnumerable);