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方法がわかりません。

このような交差点拡張メソッドを使用できると思いました...

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

しかし、ルートリストではなくメンバーリストに基づいて行動しているため、うまくいきません。

これは、intersect (または他の linq) メソッドで実行できますか?

セス

4

3 に答える 3

1

リストの結果が本当に必要な場合は、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

交差を使用します。

2 つの IEnumerable を使用した例

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

.Where()および他のすべての lINQ メソッドはIEnumerable<T>、 ではなく、遅延反復を伴う を返しますList<T>
にキャストすることはできませんList<T>

が必要な場合はList<T>、 にお電話ToList()ください。

于 2012-05-02T22:51:38.473 に答える