LINQ Group By 和选择集合
Posted
技术标签:
【中文标题】LINQ Group By 和选择集合【英文标题】:LINQ Group By and select collection 【发布时间】: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,但可以使用一些指针。
【问题讨论】:
【参考方案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
属性必须是一个列表。
您能否为此提供一些帮助:***.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<>
而不是.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 是客户订购的商品。
【讨论】:
以上是关于LINQ Group By 和选择集合的主要内容,如果未能解决你的问题,请参考以下文章
LINQ:从列表中选择项目(Group By/Select/Sum & Max!)
如何通过 join 和 group by 在 C# Linq 中获取 Min?
java中list集合的内容,如何使用像数据库中group by形式那样排序