我希望你能帮助我。
我目前有一个数据结构,这样我得到了分组后(名称年和状态)linq聚合查询(这不能改变)
Name Year State Total
Bobby 2015 East 5
Bobby 2015 West 5
Bobby 2015 North 10
Paul 2015 East 15
如何使用linq将上面的结构转换为下面的结构。
Name Year East West North Total
Bobby 2015 5 5 10 20
Paul 2015 15 0 0 15
请记住,我试图避免在我的linq组中使用state=East ? Add east value : 0
这样的If
语句来获得所需的结构。
提前感谢您的帮助
在Linq中使用pivot:
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
s做更多的动态枢轴(所以你可以动态添加列),但如果你的列在设计时是已知的,这个方法是更干净的IMHO。