使用linq对多个进行分组[重复]

Posted

技术标签:

【中文标题】使用linq对多个进行分组[重复]【英文标题】:Group BY multiple using linq [duplicate] 【发布时间】:2016-07-20 06:19:08 【问题描述】:

尝试按多个文件分组,但遇到问题。我想按时间段、产品代码分组。

var ProductUsageSummary = from b in myProductUsage
                            group b by b.ProductCode into g
                            select new
                            
                                Period = g.Key,
                                Code = g.Key,
                                Count = g.Count(),
                                TotalQty = g.Sum(n => n.Qty),
                                Price = g.Average(n => n.Price)
                            ;

也试过

var ProductUsageSummary = from b in myProductUsage
                            group b by b.Period b.ProductCode into g
                            select new
                            
                                Period = g.Key(n => n.period),
                                Code = g.Key,
                                Count = g.Count(),
                                TotalQty = g.Sum(n => n.Qty),
                                Price = g.Average(n => n.Price)
                            ;

【问题讨论】:

【参考方案1】:

您可以创建一个匿名对象来对多列进行分组(例如...new prop1 prop2),Key.PropertyName 可以访问分组的字段

试试这个。

var ProductUsageSummary = from b in myProductUsage
                          group b by new  b.Period,  b.ProductCode into g
                          select new
                          
                              Period= g.Key.Period,
                              Code = g.Key.ProductCode ,
                              Count = g.Count(),
                              TotalQty = g.Sum(n => n.Qty),
                              Price = g.Average(n => n.Price)
                          ;

【讨论】:

【参考方案2】:

这是使用匿名类型的正确语法

group b by new  b.ProductCode, b.Period  into g

然后在选择中:

g.Key.ProductCodeg.Key.Period

完整查询:

var ProductUsageSummary = from b in myProductUsage
                          group b by new  b.Period b.ProductCode  into g
                          select new
                          
                              Period = g.Key.Period,
                              Code = g.Key.ProductCode,
                              Count = g.Count(),
                              TotalQty = g.Sum(n => n.Qty),
                              Price = g.Average(n => n.Price)
                          ;

【讨论】:

以上是关于使用linq对多个进行分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# LINQ 在列表中查找重复项

C# 属性列表。需要根据2个条件对它们进行分组[重复]

如何使用linq按多列分组[重复]

C# LINQ 组按属性集合,然后按列表定义的显式顺序对每个组进行排序[重复]

如何使用linq对数据表中的多个列进行分组? [复制]

c# linq groupby是默认去掉重复行吗