2016-05-12 7 views
1

Ich habe eine Datentabelle mit mehreren Schlüsselspalten (key1, key2, ..., keyN). Ich möchte die verschiedenen Tastenkombinationen in der Tabelle zählen, die bestimmten Kriterien entsprechen (IsInError = false).C# Linq So wählen Sie die eindeutige Zeilenanzahl mehrerer Spalten in einer Datentabelle aus

Grundsätzlich möchte ich die Abfrage

SELECT COUNT (*) FROM auszuführen (SELECT DISTINCT Tasten 1, 2, ..., Keyn FROM TABLE WHERE IsInError = 'false') Ein

auf der Datentabelle .

Ich habe ein wenig recherchiert und festgestellt, dass für eine Tabelle nur einen Schlüssel (und nicht ‚wo‘), die ich kann das tun

DataTable table = new DataTable(); 

int nRows = table 
    .AsEnumerable() 
    .Select(r => r.Field<string>("key1")) 
    .Distinct() 
    .Count(); 

Aber wie würde ich mich darüber mit mehreren Schlüsseln zu tun und ein Zustand?

Antwort

2

versuchen, etwas wie folgt aus:

table.AsEnumerable().Where(v => v.Field<bool>("IsInError") == false).Select(_ => new { key1 = _.key1, key2 = _.key2, ...., keyn=_.keyn }).Distinct().Count(); 
+1

Danke! Das hat perfekt funktioniert! Ich musste Ihre Lösung etwas ändern, da ich nicht mit einer stark typisierten Datentabelle arbeite, und IsInError ist ein Bitfeld. Abgesehen davon war es perfekt! – mortysporty

+0

Bearbeitet es um Ihre Antwort besser zu passen. –

+0

Daumen hoch! :) Vielen Dank – mortysporty

-1

Eine Gruppe von könnte für dieses Szenario besser geeignet sein.

Es gruppiert die Spalten in verschiedene Zeilen und gibt ggf. eine Zählung zurück.

heißt

var groups = table.GroupBy(_ => new {_.Key1, _.Key2, _.KeyN}) 
        .Select(_ => new { key = _.Key, count = _.Count()); 

Dies ist ungetestet Code, sollte aber Punkt, den Sie in die richtige Richtung helfen.

+0

Thank you! Ich werde es versuchen! – mortysporty

Verwandte Themen