如何在LINQ中使用GroupBy和Sum?

时间:2014-03-13 12:42:48

标签: c# linq group-by linq-to-objects

我在使用SelectMany的以下查询中遇到了GroupBy和Sum。有人可以告诉我如何将两个字段相加,以及如何分组和按几个字段排序。

var Rows = allData.SelectMany(u => u._rows.Select(t => new
{
  OA = t[4],
  CD = t[5],
  PD = t[0],
  DS = Convert.ToInt32(t[9]),
  CS = Convert.ToInt32(t[10])
}))
// Pseudo-code:
//.GroupBy(CD)
//.GroupBy(OA)
//.GroupBy(PD)
//.Sum(u=> u.DS)
//.Sum(u => u.CS)
.OrderBy(u => u.CD)
.ThenBy(u => u.OA)
.ThenBy(u => u.PD)
.ToList();

对象:

List<DataProperty> allData = new List<DataProperty>();         

DataProperty由

组成
private readonly Dictionary<string, string> _headers = new Dictionary<string, string>(); 
private readonly List<string[]> _rows = new List<string[]>();

来自ColdFusion的C#重写之前的原始查询:

SELECT 
OA,
CD,
PD,               
sum(DS) as DS
sum(CS) as CS
FROM qDistinct
GROUP BY 
CD,
OA,
PD
ORDER BY 
ucaseCD,
OA,
PD

如果在没有Sum的情况下,GroupBy在以下查询中的编码方式不同,您还可以告诉我该怎么做吗?

var Rows = allData.SelectMany(u => u._rows.Select(t => new
{
  OA = t[4],
  PD = t[0]      
}))
// Pseudo-code:
//.GroupBy(OA)
//.GroupBy(PD)   
.OrderBy(u => u.OA)
.ThenBy(u => u.PD)
.ToList();

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你想要什么 - 这样的事情?

var Rows = allData.SelectMany(u => u._rows.Select(t => new
{
  OA = t[4],
  CD = t[5],
  PD = t[0],
  DS = Convert.ToInt32(t[9]),
  CS = Convert.ToInt32(t[10])
}))
// group by the combination of CD, OA, and PD
.GroupBy(x => new { x.CD, x,OA, x.PD } )
// sum DS and CS within each group
.Select (g => new {g.Key.CD, 
                   g.Key.OA, 
                   g.Key.PD,  
                   DS = g.Sum(u=> u.DS), 
                   CS = g.Sum(u=> u.CS) 
                  } ) 
.OrderBy(u => u.CD)
.ThenBy(u => u.OA)
.ThenBy(u => u.PD)
相关问题