多行到列

时间:2014-02-04 16:40:24

标签: linq-to-sql linq-to-objects

我有这样的表

ID  message
1   jame
1   cluster
1   alpha
2   apple
2   orange

如何使用LINQ给出如下答案

ID Message
1  Jame,cluster,alpha
2  apple,orange

我看到了以下网址,但它不适用于我 Convert multiple rows into single in datatable 我在上面链接中给出的LINQ中执行string.join时遇到错误。

我的代码与上面的链接相同

      var result = dataTable.AsEnumerable()
        .GroupBy(row => row.Field<int>("ID"))
        .Select(g =>
            {
                var row = dataTable.NewRow();
                row.ItemArray = new object[]
                {
                    g.Key, 
                    string.Join(",", 
                              g.Select(r => r.Field<string>("message")))
                };

                return row;
            }).CopyToDataTable();

错误消息:参数2:Connot从System.Collection.generic.IEnumerable转换为string []

1 个答案:

答案 0 :(得分:1)

使用linq-to-objects,您可以执行此操作

var query = from x in list
            group x by x.ID into g
            select new
            {
              ID = g.Key,
              Message = string.Join(",", g.Select(x => x. Message)),
            };

使用linq-to-sql,您可以使用linq-to-sql进行分组,但字符串聚合必须使用linq-to-objects进行

var query = (from x in db.list
            group x by x.ID into g
            select g).AsEnumerable().Select(g =>
              ID = g.Key,
              Message = string.Join(",", g.Select(x => x. Message)),
            );
相关问题