2012-03-06 2 views
-1

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

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

    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 | 
    
+0

Возможный дубликат [Howto: подсчитать элементы из IEnumerable без повторения?] (Http://stackoverflow.com/questions/168901/howto-count-the-items-from-a-ienumerablet-without-iterating) – ChrisF

+1

Я думаю, что вы спрашиваете то же самое, что и этот вопрос ... http://stackoverflow.com/questions/1225710/linq-to-dataset-multiple-group-by-on-a-data-table –

+0

Спасибо Крисофер , Ты прав. я искал то же самое, что вы предложили –

ответ

0

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

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

Также см этот вопрос для получения дополнительной информации: Howto: Count the items from a IEnumerable without iterating?

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

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