【问题标题】:LINQ Group By and select collectionLINQ Group By 和选择集合
【发布时间】:2012-05-17 14:33:04
【问题描述】:

我有这个结构

Customer
 - has many Orders
  - has many OrderItems

给定OrderItems 的子集,我想通过 LINQ 生成CustomerItems 的列表:

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

这是客户从商品子集中订购的所有商品的分组

如何使用 LINQ 回溯订单并按客户分组以生成此对象?

到目前为止,我正在做类似的事情

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

但这显然不是一个列表。我猜我在某个地方需要一个 SelectMany,但可以使用一些指针。

【问题讨论】:

    标签: c# linq group-by


    【解决方案1】:

    我想你想要:

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

    ...但我个人觉得不太清楚。

    【讨论】:

    • 您需要对组进行 ToList() 调用吗?最后一个 ToList() 还不够吗?
    • @Joanna:根据OP的要求,匿名类型的Items属性必须是一个列表。
    • 您能否为此提供一些帮助:stackoverflow.com/questions/44764687/…
    • 似乎“group by”在 EfCore5 中不再适用,即使在最简单的情况下(from la in dbContext.LawArticles group la by new { la.TenantId, la.LawArticleId } into aAgg select new { TenantId = aAgg.Key.TenantId, LawArticleId = aAgg.Key.LawArticleId, ArticleTexts = aAgg.ToList() },抱怨“无法翻译 LINQ 表达式 'GroupByShaperExpression ...”...
    【解决方案2】:

    你可能也喜欢这个

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

    【讨论】:

    • 为什么我得到的是item.Field&lt;&gt;而不是.Order?我正在使用数据表。
    【解决方案3】:

    你可以通过加入群组来实现它

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

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 2017-02-06
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      相关资源
      最近更新 更多