2014-10-15 2 views
0

Привет всем Я имею результирующий набор следующим образомГруппировка из DataTable с помощью LINQ

ID  Name  Price 
    1  XYZ  10 
    2  ABC  10 
    1  ABC  20 

Я хотел бы выполнить группу, так что она должна дать мне

ID  Name  Price 
    1  XYZ  10 
      ABC  20 
    2  ABC  10 

Я попытался с решение сформировать ссылки, но я не мог получить DataTable linq query to group by a column может кто-нибудь мне помочь

+7

Ваш ожидаемый результат не сгруппирован, он просто упорядочен по id, а затем по цене, и по какой-то причине на второй записи вы не показываете с идентификатором. –

+0

Но я не хочу отображать ID один раз – Dotnet

+0

Я привязываю данные к списку, поэтому он отображает меня несколько, но я хотел бы показать, как опубликовано – Dotnet

ответ

2

Если вы не хотите менять исходные объекты, вам нужно будет создать проект и удалить повторяющиеся значения идентификатора. Что-то вроде:

var query = 
    data.GroupBy(d => d.ID) 
     .OrderBy(g => g.Key) 
     .SelectMany(g => (new[] {new { 
             g.First().ID, 
             g.First().Name, 
             g.First().Price}}) 
         .Concat(g.Skip(1).Select(i => new { 
                  ID = (string)null, 
                  i.Name, 
                  i.Price}))); 

по существу:

  • группы по ID
  • принимают все значения первого элемента в каждой группе
  • принимать все значения, кроме Id для всех других элементов в группе
+0

Как я могу создать это из Datatable? – Dotnet

+0

Тот же принцип, просто используйте доступ столбца вместо доступа к ресурсам ('i [" ID "]' вместо 'i.ID') –

+0

Спасибо, что я сменил его работу – Dotnet

2

Вы можете сделать что-то же просто, как это

context.Table.GroupBy(t => t.ID); 

Это будет возвращать что-то такого типа IQueryable<IGrouping<int, YourClass>> (предполагается, что ваш ID является целое)

Каждая запись будет иметь ключ (идентификатор в данном случае) и Enumerator, так что вы можете пройти через все записи сгруппированных