Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据表分组由逗号分隔_C#_Linq_Datatable_Group By - Fatal编程技术网

C# 数据表分组由逗号分隔

C# 数据表分组由逗号分隔,c#,linq,datatable,group-by,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        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实现这一点并将结果保存到数据表中呢?

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

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
  };

当然,一旦您这样做,您将看到您正在对
tName
allowgroup
列进行一些大胆的假设。你一定是有意的。如果没有,则应按所有三列分组,而不是仅按
cName

进行分组。您可以执行以下操作:

    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);
    }

这篇文章有你的答案。。。