2014-03-13 77 views
0

我在使用SelectMany的以下查詢中苦於GroupBy和Sum。有人能告訴我如何總結兩個領域以及如何按幾個領域進行分組和排序。如何在LINQ中使用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 

如果GroupBy在以下不帶Sum的查詢中編碼不同,您是否也請告訴我該怎麼做?

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

這不是很清楚你想要什麼 - 像這樣?

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) 
+0

這是從ColdFusion重寫C#之前的查詢: – user2142250

+0

請將它添加到您的問題中,以便能夠正確格式化。 –