是否可以使用LINQ进行数据透视?

时间:2020-03-06 15:04:48  来源:igfitidea点击:

我是LINQ的新手,但我想知道是否可以使用LINQ从以下布局中透视数据:

CustID | OrderDate | Qty
1      | 1/1/2008  | 100
2      | 1/2/2008  | 200
1      | 2/2/2008  | 350
2      | 2/28/2008 | 221
1      | 3/12/2008 | 250
2      | 3/15/2008 | 2150

变成这样的东西:

CustID  | Jan- 2008 | Feb- 2008 | Mar - 2008 |
1       | 100       | 350       |  250
2       | 200       | 221       | 2150

解决方案

将数据按月分组,然后将其投影到带有每个月列的新数据表中。新表将成为数据透视表。

像这样吗?

List<CustData> myList = GetCustData();

var query = myList
    .GroupBy(c => c.CustId)
    .Select(g => new {
        CustId = g.Key,
        Jan = g.Where(c => c.OrderDate.Month == 1).Sum(c => c.Qty),
        Feb = g.Where(c => c.OrderDate.Month == 2).Sum(c => c.Qty),
        March = g.Where(c => c.OrderDate.Month == 3).Sum(c => c.Qty)
    });

Linq中的" GroupBy"与SQL的工作方式不同。在SQL中,我们可以获取键和聚合(行/列形状)。在Linq中,我们可以获取密钥和任何元素作为密钥的子级(层次形状)。要进行透视,我们必须将层次结构投影回我们选择的行/列形式。