【问题标题】:.NET Merge Single Column from datarows when ID matchs当 ID 匹配时,.NET 合并数据行中的单列
【发布时间】:2015-04-24 10:54:10
【问题描述】:

只是事先,我无法访问编写的 SQL 查询,所以我所能做的就是在查询执行后尝试处理数据集。 我正在使用 ASP.NET Webforms 尝试在 SQL 返回的数据表中仅合并一列,例如

PID | C1 | C2 | C3 | I1

1   | a  | a  | a  | bob

1   | x  | x  | x  | Jim

1   | b  | b  | b  | Fred

2   | g  | g  | g  | Jill

从这个数据集中我想看看:

PID | C1 | C2 | C3 | I1

1   | a  | a  | a  | bob Jim Fred

2   | g  | g  | g  | Jill

基本上我不在乎 C1-C3 中的内容,它只会采用第一个匹配项的值。我需要做的是将 I1 的所有值加入到基于匹配 PID 的一个结果中。

任何帮助将不胜感激。 LINQ 的答案可以接受,最好在 vb.net 中,这样我以后就不必更改了。

谢谢。

【问题讨论】:

  • 你可以试试String.JoinJoin 来得到你想要的。

标签: asp.net .net vb.net linq dataset


【解决方案1】:

您可以将group byString.Join 一起使用。我在c# 中添加答案,您可能想转换为vb(我不太擅长vb 语法:P)。

  var result = dataListObject.GroupBy(l =>  l.PId )
                 .Select(g => new { PID = g.Key.PId, C1= g.Key.C1, C2 = g.Key.C2, C3=g.Key.C3, I1 = string.Join(",", g.Select(i => i.I1)) });

应该选择第一个PID,C1,C2和C3。然后一起加入I1。还没有检查过,但似乎应该可以工作。

更新 对于数据表,您可以将AsEnumerable() 应用于数据表以使其可枚举

   var result = datatable.AsEnumerable().GrouBy(l=>l.Field<string>("Pid"))
               .Select(g=>new{PID = g.Key.PId, C1= g.Key.C1, C2 = g.Key.C2, C3=g.Key.C3, I1 = string.Join(",", g.Select(i => i.I1)) });

【讨论】:

  • 嗨,很干净的查询。我将如何使这项工作适用于数据表。谢谢。
猜你喜欢
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2019-02-10
相关资源
最近更新 更多