web-dev-qa-db-ja.com

LINQ Group Byおよび選択コレクション

私はこの構造を持っています

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が必要だと思っていますが、いくつかのポインタでできます。

53

あなたが欲しいと思う:

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() 

...しかし、私は個人的にはそれほど明確ではないと思います。

98
Ani

これも好きかも

var Grp = Model.GroupBy(item => item.Order.Customer)
      .Select(group => new 
        { 
             Customer = Model.First().Customer, 
             CustomerId= group.Key,  
             Orders= group.ToList() 
       })
      .ToList();
4
caras

グループ参加で達成できます

var result = (from c in Customers
          join oi in OrderItems on c.Id equals oi.Order.Customer.Id into g
          Select new { customer = c, orderItems = g});

cは顧客、gは顧客の注文品目です。

2
cimey