現在、次のコードがあります。
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
そして、上記と同じ既存の構造を維持する必要があります。
どんな助けでも大歓迎です。