2016-05-11 24 views
1

erscheinen ich eine Datatable mit einer Spalte (Column A):Wie zählen, wie oft ein Wert/Werte in einer Datentabelle

Column A 
GOOD 
NOT GOOD 
GOOD 
PERFECT 
PERFECT 
GOOD 

Das Ergebnis Datatable aus der obigen verschieden sein können, ich kann so nicht Verwenden Sie einen statischen Wert.

Wie kann ich durch die Spalte iterieren, so dass es zählt, wie viele der gleichen Wert pro Zeile in der Spalte wiederholt wird.

Etwas wie folgt aus:

Good = 3 
NOT GOOD = 1 
PERFECT = 2 

Ein weiteres Beispiel:

Column A 
DO IT 
DON'T DO IT 
DON'T DO IT 
DON'T DO IT 
DO IT 
DO IT 

Und das Ergebnis wäre:

DO IT = 3 
DON'T DO IT = 3 
+0

Was mit 'GROUP BY' falsch? –

+0

Ich habe versucht: 'datatable.DefaultView.ToTable (True," Spalte A ");' aber das hat nicht funktioniert. Ich vermute, dass ich zuerst die eindeutigen Zeilen bekommen muss und dann die Datentabelle durchlaufen und zu einem Zähler hinzufügen muss? – Si8

+0

Wenn Sie manuell iterieren möchten, dann können Sie genau das tun. Überstreichen Sie die Datensätze und addieren/erhöhen Sie Werte in zB einem 'Dictionary '. Wenn sich die Zeichenfolge im Wörterbuch befindet, erhöhen Sie den Wert. Wenn nicht, füge es mit einer "1" hinzu. Am Ende der Schleife haben Sie die Informationen, nach denen Sie suchen. – David

Antwort

3

Verwenden AsEnumerable, und einige LINQ über die DataRow zur Gruppe der Elemente nach ihrem Wert und erhalten die Anzahl:

var dt = new DataTable(); 
dt.Columns.Add("A"); 
dt.Rows.Add("GOOD"); 
dt.Rows.Add("NOT GOOD"); 
dt.Rows.Add("GOOD"); 
dt.Rows.Add("PERFECT"); 
dt.Rows.Add("PERFECT"); 
dt.Rows.Add("GOOD"); 

var result = dt.AsEnumerable() 
       .GroupBy(r => r.Field<string>("A")) 
       .Select(r => new 
          { 
           Str = r.Key, 
           Count = r.Count() 
          }); 

foreach (var item in result) 
{ 
    Console.WriteLine($"{item.Str} : {item.Count}"); 
} 

GOOD: 3

NICHT GUT: 1

PERFECT: 2

I für jede Zeilengruppen basierend auf dem Wert der Spalte "A" bin zu schaffen, und dann den String-Wert und die Anzahl erhalten.

+0

Es scheint, als gäbe es keine Erweiterung für 'AsEnumerable' für DataTable ... – Si8

+0

' AsEnumerable' ** ist ** eine Erweiterung für DataTable im System.Data-Namespace. – Jonesopolis

+0

Ungerade. Ich habe diesen Namespace in meiner Lösung:/ – Si8

2

Sie können Linq zu Gruppenspalten aus Datentabelle verwenden:

var groups = dt.AsEnumerable() 
       .GroupBy(r => r.Field<ColumnType>("columnName"), 
       (row, g) => new { Column = row, count = g.Count() }); 
+0

Vielen Dank für die Lösung. +1 für die Antwort – Si8

Verwandte Themen