转换 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 做更多的动态数据透视(这样您就可以动态添加列),但是如果您的列在设计时已知,则此方法更简洁恕我直言。