2014-02-04 5 views
0

У меня есть таблица, как этоНесколько строк в колонке

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

Как использовать LINQ, чтобы дать ответ, как показано ниже

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

Я видел ниже URL, но он не работает для меня Convert multiple rows into single in datatable Я я получаю ошибку при выполнении string.join в LINQ, указанном в приведенной выше ссылке.

Мой код такой же, как выше ссылке

 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: Невозможно открыть преобразование из System.Collection.generic.IEnumerable в строку []

+0

Ошибки содержат все виды полезной информации, которой нам сейчас не хватает. –

+0

Сообщение об ошибке: Connot convert from System.Collection.generic.IEnumerable to string [] – user3271721

+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)), 
      ); 
+1

«Официально» 'string.Join' лучше, потому что он не создает новые строки для каждого шага, как' Aggregate'. –

+0

Можете ли вы рассказать мне, как вынуть из таблицы вместо списка? – user3271721

Смежные вопросы