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

是否可以使用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


斯蒂芬大帝
浏览 623回答 3
3回答

慕尼黑的夜晚无繁华

像这样吗?List<CustData>&nbsp;myList&nbsp;=&nbsp;GetCustData(); var&nbsp;query&nbsp;=&nbsp;myList &nbsp;&nbsp;&nbsp;&nbsp;.GroupBy(c&nbsp;=>&nbsp;c.CustId) &nbsp;&nbsp;&nbsp;&nbsp;.Select(g&nbsp;=>&nbsp;new&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CustId&nbsp;=&nbsp;g.Key, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jan&nbsp;=&nbsp;g.Where(c&nbsp;=>&nbsp;c.OrderDate.Month&nbsp;==&nbsp;1).Sum(c&nbsp;=>&nbsp;c.Qty), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Feb&nbsp;=&nbsp;g.Where(c&nbsp;=>&nbsp;c.OrderDate.Month&nbsp;==&nbsp;2).Sum(c&nbsp;=>&nbsp;c.Qty), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;March&nbsp;=&nbsp;g.Where(c&nbsp;=>&nbsp;c.OrderDate.Month&nbsp;==&nbsp;3).Sum(c&nbsp;=>&nbsp;c.Qty) &nbsp;&nbsp;&nbsp;&nbsp;});GroupBy在Linq中,它的工作方式与SQL不同。在SQL中,可以获得键和聚合(行/列形状)。在Linq中,可以将键和任何元素作为键的子元素(分层形状)。要执行支点,必须将层次结构投影回您选择的行/列形式。

森林海

我认为,最简洁的方法是使用查找:var&nbsp;query&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;c&nbsp;in&nbsp;myList &nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;c&nbsp;by&nbsp;c.CustId&nbsp;into&nbsp;gcs &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;lookup&nbsp;=&nbsp;gcs.ToLookup(y&nbsp;=>&nbsp;y.OrderDate.Month,&nbsp;y&nbsp;=>&nbsp;y.Qty) &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;new &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CustId&nbsp;=&nbsp;gcs.Key, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jan&nbsp;=&nbsp;lookup[1].Sum(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Feb&nbsp;=&nbsp;lookup[2].Sum(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mar&nbsp;=&nbsp;lookup[3].Sum(), &nbsp;&nbsp;&nbsp;&nbsp;};
打开App,查看更多内容
随时随地看视频慕课网APP