C# LINQ Group By并选择集合

C# LINQ Group By并选择集合,c#,linq,group-by,C#,Linq,Group By,我有这个结构 Customer - has many Orders - has many OrderItems 我想通过LINQ生成客户项的列表,给定订单项的子集: List of new { Customer, List<OrderItem> Items } 但这显然不是一个清单。我想我需要一个SelectMany,但需要一些指针。我想你需要: items.GroupBy(item => item.Order.Customer) .Select(group

我有这个结构

Customer
 - has many Orders
  - has many OrderItems
我想通过LINQ生成
客户项的列表,给定
订单项的子集

List of new { Customer, List<OrderItem> Items }
但这显然不是一个清单。我想我需要一个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() 

…但我个人觉得这不太清楚。

你可以通过加入团体来实现

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是客户订购的商品。

您可能也喜欢这样

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

是否需要对组进行ToList()调用?最后一个ToList()还不够吗?@Joanna:根据OP的要求,匿名类型的
Items
属性必须是一个列表。请您提供一些帮助:为什么我得到
item.Field
而不是
。Order
?我使用的是数据表。
var Grp = Model.GroupBy(item => item.Order.Customer)
      .Select(group => new 
        { 
             Customer = Model.First().Customer, 
             CustomerId= group.Key,  
             Orders= group.ToList() 
       })
      .ToList();