Группировать элементы по количеству в IEnumerable - PullRequest
0 голосов
/ 06 марта 2012

Как мы можем получить количество строк по значению данного столбца?

  • Я создаю IEnumerable из данных, возвращаемых из хранимой процедуры

        DataSet ds = new DataSet();
        // code to get table using sp    
        IEnumerable<DataRow> Myrows = ds.Tables[0].AsEnumerable();
    
  • Моя таблица возвращает данные типа

       Id | Column1 | Column2 | Column3 |
        1 | xCol1   | xCol2   | xCol3   |
        2 | xCol1   | xyy     | ser     |
        3 | xCol2   | 2324    | ser     |
    
  • Теперь я хочу получить количество строк с группой по Column1. Так что мой результат должен быть

        Count | Column |
          2   | xCol1  |
          1   | xCol2  |
    

Ответы [ 2 ]

0 голосов
/ 06 марта 2012
    DataSet ds = new DataSet();
    // code to get table using sp    
    var grouped = ds.Tables[0].AsEnumerable().GroupBy(q=>q.Table.Columns["column1"]).Select(q=> new{Count = q.Count(), Column = q});

Я не пробовал. Но что-то в этом роде.

0 голосов
/ 06 марта 2012

Есть несколько способов сделать это:

  1. Итерация по коллекции IEnumerable и подсчет элементов.
  2. Если вы не хотите выполнять итерацию, используйте Myrows.ToList().Count, который создаст список из коллекции IEnumerable и получит свойство Count Списка.

Вы можете использовать linq, чтобы выполнить группировку и получить отсчет.Вот пример:

var groups =
  from row in rows
  group rows by row.Column;

foreach (var group in groups)
  Console.WriteLine("key: {0} count: {1}",
    group.Key, group.Count());

Также см. Этот вопрос для получения дополнительной информации: Как: считать элементы из IEnumerable без итерации?

...