如何使用linq对数据表中的多个列进行分组? [复制]

Posted

技术标签:

【中文标题】如何使用linq对数据表中的多个列进行分组? [复制]【英文标题】:How to group by on multiple columns from datatable with linq? [duplicate] 【发布时间】:2013-12-20 07:49:16 【问题描述】:

我正在使用 Linq 按我的数据表中的某些列进行分组

List<DataTable> tables = ds
  .Tables[0]
  .AsEnumerable()
  .GroupBy(row => row.Field<string>("EMAIL"), row.Field<string>("NAME"))
  .Select(g => g.CopyToDataTable())
  .ToList();

我收到构建错误“当前上下文中不存在名称‘行’”?如何处理多个分组?

【问题讨论】:

【参考方案1】:

为此使用匿名对象:

List<DataTable> tables = ds.Tables[0].AsEnumerable()
                           .GroupBy(row => new 
                               Email = row.Field<string>("EMAIL"), 
                               Name = row.Field<string>("NAME") 
                           ).Select(g => g.CopyToDataTable()).ToList();

【讨论】:

该错误是因为 lambda 表达式返回单个表达式 (row.Field&lt;string&gt;("EMAIL")) 并且编译器将逗号后面的表达式作为 GroupBy 方法的另一个参数进行插入。由于这在表达式的上下文之外,没有row 变量,编译器会给出这个错误。这个答案通过让 lambda 表达式返回一个表达式 - 一个匿名对象来解决问题。

以上是关于如何使用linq对数据表中的多个列进行分组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用linq对多个进行分组[重复]

如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值

如何对多个列上的数据集进行分组并同时进行不同的聚合? Python

通过对数据框列中的值进行分组来绘制多个图?

如何使用 Linq 按日期时间和平均结果对字典进行分组

使用 Python,如何按小时对 Dataframe 中的列进行分组?