转换 Linq 数据结构
Transform Linq Data Structure
希望你能帮到我。
我目前有这样的数据结构,我在分组后(按名称年份和状态)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
以获得所需的结构。
提前感谢您的帮助。
下面是在 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
做更多的动态数据透视(这样您就可以动态添加列),但是如果您的列在设计时已知,则此方法更简洁恕我直言。
希望你能帮到我。
我目前有这样的数据结构,我在分组后(按名称年份和状态)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
以获得所需的结构。
提前感谢您的帮助。
下面是在 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
做更多的动态数据透视(这样您就可以动态添加列),但是如果您的列在设计时已知,则此方法更简洁恕我直言。