C# 使用linq按多个分组

C# 使用linq按多个分组,c#,linq,C#,Linq,尝试按多个文件分组,但遇到问题。我想按时段分组,产品代码 var ProductUsageSummary = from b in myProductUsage group b by b.ProductCode into g select new { Period =

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

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)
                            };

您可以创建一个匿名对象来对多个列进行分组(例如,
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)
                          };

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

然后在选择中:

g.Key.ProductCode
g.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)
                          };
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)
                          };