转换Linq数据结构

时间:2015-06-05 13:10:41

标签: linq ravendb

我希望你能提供帮助。

我目前有一个数据结构,所以我得到分组后(名称年份和状态)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来获得所需的结构。

提前感谢您的帮助。

1 个答案:

答案 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执行更多动态支点(因此您可以动态添加列)但如果您的列在设计时已知,则此方法更清晰恕我直言。