1. ホーム
  2. c#

[解決済み] LINQ Group Byとselectコレクション

2023-04-23 21:30:26

質問

以下のような構造になっています。

Customer
 - has many Orders
  - has many OrderItems

のリストを生成したい。 CustomerItems のサブセットを与えてLINQで OrderItems :

List of new { Customer, List<OrderItem> Items }

これは、顧客が注文したすべてのアイテムのサブセットからグループ化されたものです。

LINQを使用して注文をバックトラックし、顧客ごとにグループ化してこのオブジェクトを生成するにはどうすればよいでしょうか。

今のところ、私は次のようなものに取り組んでいます。

items
 .GroupBy(i => i, i => i.Order.Customer, (i, customer) => new {customer, i})

しかし、それは明らかにリストではありません。私はどこかにSelectManyが必要だと思いますが、いくつかのポインタが必要でしょう。

どのように解決するのですか?

あなたが望んでいることだと思います。

items.GroupBy(item => item.Order.Customer)
     .Select(group => new { Customer = group.Key, Items = group.ToList() })
     .ToList() 

のオーバーロードを使い続けたい場合。 GroupBy を使い続けたい場合は、そうすることができます。

items.GroupBy(item => item.Order.Customer, 
              (key, group) =>  new { Customer = key, Items = group.ToList() })
     .ToList() 

...ですが、個人的にはその方が分かりやすいと思います。