1

多数のネストされたコレクションを含むモデルがあります。例えば...

My Sales Record
  Contains a collection of Customers
    Each Customer contains a collection of Orders
      Each Order contains a collection of Items

ネストされた foreach ループを記述せずに、販売レコードに関連付けられたすべてのアイテムのリストを作成できるようにしたいと考えています。私が試してみました...

var items = SalesRecord.SelectMany(r => r.Customers)
               .SelectMany(c => c.Orders)
               .Select(o => o.Items);

しかし、これは機能しません。

これはLINQで達成可能ですか?

4

2 に答える 2

2

もう 1 つ SelectMany が必要です:

var items = SalesRecord.Customers // simply select customers from record
               .SelectMany(c => c.Orders)
               .SelectMany(o => o.Items); // here

結果を平坦化する必要があります。そうしないと、アイテム コレクションのコレクションができてしまいます。ToList()また、アイテムのリストが必要な場合は、クエリの最後に呼び出すことを忘れないでください。

于 2013-10-24T16:43:17.367 に答える
0

Selectをいくつか呼び出して、各販売レコードを、そのレコードとそのレコードのフラット化されたアイテムのリストを含むアイテムにマップするために使用しSelectManyます。

var items = SalesRecord.Select(record => new
{
    record,
    Items = record.Customers
        .SelectMany(c => c.Orders)
        .SelectMany(o => o.Items),
});
于 2013-10-24T16:48:51.177 に答える