我正在做以下事情......
//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)方法完成吗?
赛斯
答案 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);