转换Linq数据结构



我希望你能帮助我。

我目前有一个数据结构,这样我得到了分组后(名称年和状态)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。

相关内容

  • 没有找到相关文章

最新更新