如何使用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对数据表中的多个列进行分组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章