1

我有一个如下所示的数据表

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 来完成它并将结果保存到数据表中呢?

4

2 回答 2

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.

于 2013-07-25T21:28:08.227 回答
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);
    }
于 2013-07-25T21:36:55.490 回答