DataTable组由逗号分隔

时间:2013-07-25 19:32:44

标签: c# linq datatable group-by

我有一个类似于以下

的数据表
cname  tname  text        allowgroupping
A      M      good        Yes
A      M      bad         Yes
A      M      ugly        Yes
B      N      sick        No
B      N      lovely      No
C      R      pathatic    Yes

我想通过第一列cname对数据表进行分组,因此结果将类似于

cname  tname      text                 allowgroupping
    A      M      good,bad,ugly        Yes
    B      N      sick,lovely          No
    C      R      pathatic             Yes

我通过循环每个列并进行大量检查来完成它,但是如何使用LINQ并将结果保存到数据表?

2 个答案:

答案 0 :(得分:1)

我们的想法是按照以下方式对表进行分组:

var groupedDB =
  from entry in dataTable
  group entry by entry.cName into entryGroup
  select new
  {
    cName = entryGroup.Key,
    tName = entryGroup.First().tName,
    text = String.Join(",", entryGroup.Select(_=>_.text)),
    allowGrouping = entryGroup.First().allowGrouping
  };

当然,一旦你这样做,你会发现你对tNameallowGrouping列做了一些大胆的假设。请确保你的意思。如果没有,则应按所有三列而不是cName分组。

答案 1 :(得分:1)

您可以这样做:

    var query = from row in dataTable.AsEnumerable()
                group row by row["cname"] into g
                select new {    cname = g.Key,
                                tname = g.First()["tname"] ,
                                text = String.Join(", ", g.Select(r=>r["text"].ToString()).ToArray()),
                                allowgrouping = g.First()["allowgroupping"]
                };

    foreach (var row in query)
    {
        resultDataTable.Rows.Add(row.cname, row.tname, row.text, row.allowgrouping);
    }