89

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

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が必要だと思いますが、いくつかのポインターを使用することもできます。

4

3 に答える 3

160

私はあなたが欲しいと思います:

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

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

于 2012-05-17T14:38:36.133 に答える
6

あなたもこれが好きかもしれません

var Grp = Model.GroupBy(item => item.Order.Customer)
      .Select(group => new 
        { 
             Customer = Model.First().Customer, 
             CustomerId= group.Key,  
             Orders= group.ToList() 
       })
      .ToList();
于 2016-08-08T15:26:53.900 に答える
5

あなたはグループ参加でそれを達成することができます

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は顧客の注文アイテムです。

于 2015-11-21T09:57:36.167 に答える