是否可以使用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中,我们可以获取密钥和任何元素作为密钥的子级(层次形状)。要进行透视,我们必须将层次结构投影回我们选择的行/列形式。