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);

但我猜它不起作用,因为我在成员列表而不是根列表上行事。

这可以通过 intersect (或其他一些 linq )方法来完成吗?

赛斯

4

3 回答 3

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();
于 2012-05-02T22:58:33.180 回答
0

.Where()和所有其他 lINQ 方法返回一个IEnumerable<T>惰性迭代,而不是List<T>.
您不能将它们投射到List<T>.

如果你想要一个List<T>,打电话ToList()

于 2012-05-02T22:51:38.473 回答
0

使用相交。

使用两个 IEnumerable 的示例

var ids = original.Select(x => x.ID).Intersect(yourEnumerable);
于 2012-05-02T22:55:24.277 回答