2

現在、次のコードがあります。

var data = /* enumerable containing rows in your table */;
var part = "X";
var items = new HashSet<int>(data
    .Where(x => x.PartName == part)
    .Select(x => x.ItemName));
var query = data.Where(x => items.Contains(x.ItemName));

items特定の を持つデータ内のすべてのアイテムを検索しますPartName

queryそのアイテムのデータ内のすべてのレコードを返します。

これを、別のより大きな LINQ クエリに埋め込んで使用できる単一の LET ステートメント (またはその他のもの) に変換する必要があります。

たとえば、私のデータが次のような場合 (レコード):

ItemName PartName
1        A
1        B
2        A
3        C

そして、パーツ「A」のアイテムを探しています。最終結果が次のようになる必要があります。

1        A
1        B
2        A

1つの提案は、次のようなことをすることでした:

let a = data.GroupBy(x => x.ItemName)
            .Where(g => g.Any(x => x.Partname == part))
            .Select(g => new
                {
                    ItemName = g.Key,
                    PartNames = g.Select(x => x.PartName)
                })  

ただし、(let a) で返されるデータは期待される結果と一致しません。次のような結果が返されます。

1        A,B    // list of parts for that item
2        A

そして、上記と同じ既存の構造を維持する必要があります。

どんな助けでも大歓迎です。

4

2 に答える 2

6

SelectManyグループから必要なように聞こえます:

   data.GroupBy(x => x.ItemName)
            .Where(g => g.Any(x => x.PartName == part))
            .SelectMany(g => g);
于 2013-04-18T04:04:20.543 に答える