我在使用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();
答案 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)