2012-03-06 6 views
-1

Comment pouvons-nous obtenir le nombre de lignes par la valeur d'une colonne donnée?Grouper les éléments par nombre dans IEnumerable

  • Je crée IEnumerable de datatable retour de procédure stockée

    DataSet ds = new DataSet(); 
        // code to get table using sp  
        IEnumerable<DataRow> Myrows = ds.Tables[0].AsEnumerable(); 
    
  • Mes retours de table données comme

    Id | Column1 | Column2 | Column3 | 
        1 | xCol1 | xCol2 | xCol3 | 
        2 | xCol1 | xyy  | ser  | 
        3 | xCol2 | 2324 | ser  | 
    
  • maintenant je veux obtenir le nombre de lignes avec le groupe par Column1 . Donc, mon résultat devrait être

    Count | Column | 
         2 | xCol1 | 
         1 | xCol2 | 
    
+0

duplication possible de [Comment: compter les éléments d'un IEnumerable sans itération?] (Http://stackoverflow.com/questions/168901/howto-count-the-items-from-a-ienumerablet-without-iterating) – ChrisF

+1

Je pense que vous demandez la même chose que cette question ... http://stackoverflow.com/questions/1225710/linq-to-dataset-multiple-group-by-on-a-data-table –

+0

Merci Chrisopher . tu as raison. je cherchais la même chose que vous avez suggérée –

Répondre

0

Il y a quelques façons de le faire:

  1. itérer sur la collection IEnumerable et comptent les éléments.
  2. Si vous ne voulez pas itérer, utilisez Myrows.ToList().Count pour créer une liste de la collection IEnumerable et obtenir la propriété Count de la liste.

Vous pouvez utiliser linq pour faire le groupe et obtenir le nombre à partir de là. Voici un exemple:

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

Voir aussi cette question pour plus d'informations: 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}); 

Je ne l'ai pas essayé. Mais quelque chose comme ça.