【问题标题】:Group DataTable by multiple columns and concatenate strings按多列对 DataTable 进行分组并连接字符串
【发布时间】:2015-10-10 16:37:49
【问题描述】:

我已经看到了很多关于这个问题的答案,但是不幸的是,我无法将它们与我的特定场景联系起来,因为当我尝试在分组 LINQ 语句中连接字符串时,我受限于 @987654330 上的扩展重载@ 这似乎不起作用。

基本上,我在代码中有两个 DataTable,每个都有四个记录(所有字符串)。我需要按两列分组,然后用“,”分隔符连接其他两个字段。

这两个表的分组基础相同,但是分组在不同的列集上,所以我假设我也可以将解决方案应用于一个实例到另一个实例。

我在代码中有以下数据表:

我需要按 CONTACT 和 EMAIL 对这个 DataTable 进行分组,同时将 RE​​FERENCE 和 ATTACHMENT 用 ', ' 分隔符连接起来,以生成以下数据集:

然后我有第二个 DataTable,我需要按 REFERENCE 和 ATTACHMENT 对它进行分组,同时用“,”分隔符连接 CONTACT 和 EMAIL。 DataSet 当前将包含以下数据:

我想用这个集合实现的是一个包含以下信息的 DataTable:

【问题讨论】:

  • 你能用 DataTable 显示你用来分组的 linq 代码吗?还可以查看之前的帖子stackoverflow.com/questions/8472005/…
  • @MethodMan 我认为这是我正在寻找的解决方案之一,但是它只能按单列分组;当我涉及多个分组列时,似乎需要不同的语法。这是我正在使用的 LINQ 代码:var FinalisedSingleContactMultipleReferences = from row in SingleContactMultipleReferences.AsEnumerable() group row by new { CONTACT = row.Field<string>("CONTACT"), EMAIL = row.Field<string>("EMAIL") } into grp select new { REFERENCE = grp.Join<", ", REFERENCE>, CONTACT = grp.Key.CONTACT, EMAIL = grp.Key.EMAIL, ATTACHMENT = grp.Join<", ", ATTACHMENT>}
  • @Your_Unequal - 在上述查询中,grp.Join 不正确,因为它需要加入两个实体。正如我在答案中提到的那样,您需要String.Join。只需将 REFERENCE = grp.Join<", ", REFERENCE> 替换为 REFERENCE = String.Join(",",grp.Select(z => z.Field<string>("REFERENCE")))

标签: c# linq datatable


【解决方案1】:

以下查询给了我预期的输出:-

var result = dt1.AsEnumerable()
        .GroupBy(x => new { Contact = x.Field<string>("CONTACT"), 
                            Email = x.Field<string>("EMAIL") })
        .Select(x => new 
           {
               REFERENCE = String.Join(",",x.Select(z => z.Field<string>("REFERENCE"))),
               CONTACT = x.Key.Contact,
               EMAIL = x.Key.Email,
               ATTACHMENT = String.Join(",",x.Select(z => z.Field<string>("ATTACHMENT")))
           });

输出:

此查询将返回匿名类型,而不是 DataTable。如果您希望 DataTable 作为输出,则必须使用foreach 循环创建一个,或者您可以通过实现MSDN 中提到的扩展方法来使用CopyToDataTable 方法。

同样可以查询第二个DataTable。

【讨论】:

  • 效果很好,非常感谢。还要感谢您指出问题的性质(使用grp.Join 而不是String.Join)。
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多