我希望你能提供帮助。
我目前有一个数据结构,所以我得到分组后(名称年份和状态)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 groupby中使用If
语句,例如state=East ? Add east value : 0
来获得所需的结构。
提前感谢您的帮助。
答案 0 :(得分: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
执行更多动态支点(因此您可以动态添加列)但如果您的列在设计时已知,则此方法更清晰恕我直言。