将IEnumerable列表转换为Linq中的分组列表

时间:2010-09-01 14:44:13

标签: c# linq-to-entities grouping

我有一个返回以下类型的函数:

 IEnumerable<IGrouping<String, ExportTransaction>>

在这个函数中,我使用linq表达式创建了以下类型的列表:

  IEnumerable<ExportTransaction>

Linq代码如下所示:

 IEnumerable<ExportTransaction> transactions = ctx.ExportTransactions
                                                  .Where(x => x.Id != null);

如何将“交易”转换为本页顶部所示类型的分组列表。该函数使用“事务”执行各种操作,因此它必须在函数内保留为“IEnumerable”,但在返回时必须转换为分组列表。

2 个答案:

答案 0 :(得分:1)

我假设交易有一个名称属性,这就是你要对交易所分组的内容。如果不是这种情况,您只需更改GroupBy调用中的属性:

var transactions = ctx.ExportTranactions
                      .Where(x => x.Id != null)
                      .GroupBy(x => x.Name);

答案 1 :(得分:0)

是否真的需要进行分组,如果是,您希望将 分组?听起来像你有你的数据集,你可能试图强迫它成为你不一定需要的格式。

通常,要对数据集进行分组,您需要执行以下操作:

var grouping = ctx.ExportTransactions.Where(x => x.Id != null)
                                     .GroupBy(x => x.Description);

这会创建一个IEnumerable<IGrouping<string, ExportTransaction>>对具有相同描述的所有交易进行分组,假设每个交易都有描述。

如果您需要单个组中的所有记录,您可以始终执行以下操作:

    var grouping = ctx.ExportTransactions.Where(x => x.Id != null)
                                     .GroupBy(x => string.Empty);

如果组密钥为空字符串,这将为您提供所需的内容,但我强烈建议不要使用它,而是建议您查看为什么在需要时返回分组似乎想要分组。