2015-06-05 118 views
0

我希望你能幫上忙。轉換Linq數據結構

我現在有一個數據結構是怎樣的,所以我組後,得到了由(上名一年狀態)LINQ聚集查詢(此無法更改)

Name Year State Total 

Bobby 2015 East 5 

Bobby 2015 West 5 

Bobby 2015 North 10 

Paul 2015 East 15 

如何使用LINQ to我變換上述結構下面的結構。

Name Year East West North Total 

Bobby 2015 5  5  10  20 

Paul 2015 15  0  0  15 

記住我試圖避免使用LINQ我GROUPBY If之類的語句state=East ? Add east value : 0,從而獲得所需的結構。

感謝您的幫助。

+0

您是否需要完全基於LINQ的解決方案?如果沒有,你可能會尋找專門的C#數據聚合庫,可以通過你的輸入數據計算數據透視表結果。 –

回答

1

這裏做一個支點Linq中的一種方式:

var pivot = data 
    .GroupBy(d => new {d.Name, d.Year}) 
    .Select(g => new { 
     Name = g.Key.Name, 
     Year = g.Key.Year, 
     East = g.Where(c => c.State == "East").Sum(c => c.Total), 
     West = g.Where(c => c.State == "West").Sum(c => c.Total), 
     North = g.Where(c => c.State == "North").Sum(c => c.Total), 
     South = g.Where(c => c.State == "South").Sum(c => c.Total), 
     Total = g.Sum(c => c.Total), 
    }); 

可以使用DataTable小號做多動力樞軸(這樣你就可以動態地添加列),但如果你列在設計時已知這種方法更清潔恕我直言。

+0

謝謝@D斯坦利會放棄這一切並回復你。 – Bobby

+1

如果您嘗試在RavenDB索引內執行此操作,則需要使用map/reduce索引並將其分開。 Map/reduce是分佈式的,所以你不可能期望隨時獲得全部結果。所以確保你的操作是可交換的 –