是否可以使用 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
I am wondering if it is possible to use LINQ to pivot data from the following layout:
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
into something like this:
CustID | Jan- 2008 | Feb- 2008 | Mar - 2008 |
1 | 100 | 350 | 250
2 | 200 | 221 | 2150
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
像这样的东西吗?
Linq 中的
GroupBy
的工作方式与 SQL 不同。 在 SQL 中,您可以获得键和聚合(行/列形状)。 在 Linq 中,您将获得键以及作为键子级的任何元素(分层形状)。 要进行透视,您必须将层次结构投影回您选择的行/列形式。Something like this?
GroupBy
in Linq does not work the same as SQL. In SQL, you get the key and aggregates (row/column shape). In Linq, you get the key and any elements as children of the key (hierarchical shape). To pivot, you must project the hierarchy back into a row/column form of your choosing.我使用 linq 扩展方法回答了类似问题:
(+) 通用实现
(-) 肯定比 Amy B 慢
谁能改进我的实现(即该方法对列和行进行排序)?
I answered similar question using linq extension method:
(+) generic implementation
(-) definitely slower than Amy B's
Can anyone improve my implementation (i.e. the method does the ordering of columns & rows)?
我认为最巧妙的方法是使用查找:
The neatest approach for this, I think, is to use a lookup:
下面是如何使用 LINQ 转换数据的更通用的方法:
其中 ValueKey 是表示多维键的特殊类:
此方法可用于按 N 维 (n>2) 进行分组,并且对于相当小的数据集可以很好地工作。 对于大型数据集(最多 100 万条记录及更多)或无法对枢轴配置进行硬编码的情况,我编写了特殊的 PivotData 库(免费):
Here is a bit more generic way how to pivot data using LINQ:
where ValueKey is a special class that represents multidimensional key:
This approach can be used for grouping by N-dimensions (n>2) and will work fine for rather small datasets. For large datasets (up to 1 mln of records and more) or for cases when pivot configuration cannot be hardcoded I've written special PivotData library (it is free):
这是最有效的方法:
检查以下方法。 而不是每个月每次都迭代客户组。
或者这个:
完整的解决方案:
This is most efficient way:
Check the following approach. Instead of iterating through the customers group each time for each month.
Or this one :
Complete solution:
按月份对数据进行分组,然后将其投影到包含每个月的列的新数据表中。 新表将是您的数据透视表。
Group your data on month, and then project it into a new datatable with columns for each month. The new table would be your pivot table.