0

脳がロックしていて、簡単で迅速な答えが必要です - 私はおそらくこれを間違った方向から見ていますが、今週は多くのことを抱えています. :-(

linq-to-sql を使用して、マッピング テーブルを介して多くのカテゴリにマップされた項目を含むテーブルがあります。

複数のカテゴリにマップされているすべてのアイテムを引き出す必要がありますが、必要なすべてのカテゴリにマップされているアイテムのみを抽出する必要があります。これは、任意のカテゴリ ID にマップされたデータを取得するための元のブリーフに対する変更です。

例:

人物 A はカテゴリ 1、カテゴリ 2、カテゴリ 3 にマッピングされます 人物 B はカテゴリ 1、カテゴリ 3 にマッピングされます

したがって、カテゴリ 1 と 2 を選択すると両方の人物アイテムが返されますが、1、2 と 3 を選択した場合は人物 A のみが返されます。

以下は、ANY アイテムを返す元の (簡略化された) コードです。

IList<Person> results = (from a in data from b in a.CategoryMappings 
                   where catIDs.AsEnumerable().Contains(b.CategoryID) 
                   select a).Distinct().ToList();

catIDs はIList<int>、クエリに送信されたデータから取得されたもので、任意の長さにすることができます。データは IQueryable です。

このクエリを作成する方法はありますか?

T

4

2 に答える 2

2

編集:これは有効なLINQ to SQLではなく、LINQtoObjectsです。とにかくインスピレーションの源として役立つかもしれません。

Intersectメソッドを使用できます。

var results = (from a in data
               where catIDs.Intersect(a.CategoryMappings).Count() == catIDs.Count
               select a).Distinct().ToList();

これは、列挙可能な両方の共通部分を返します。これは、基本的にはと同じ長さである必要がありますcatIDs

于 2012-05-08T14:52:02.320 に答える
0

これどう?ムドゥはまったく同じ解決策で私を打ち負かしたので、これが私の代替手段です.

catIDs リスト内のすべての要素が p.CategoryMappings にその要素が含まれている必要があるという条件を満たしている場合にのみ、データからオブジェクトを選択します。

var results = from p in data 
              where catIds.All(i => p.CategoryMappings.Contains(i))
              select p;
于 2012-05-08T15:10:27.650 に答える