2016-05-27 6 views
-1

Ich möchte die verschiedenen Werte in einer Spalte einer Datentabelle zählen. Ich fand diese nützliche Technik:Zählen Sie verschiedene Nicht-Null-Zeilen in einer Datentabelle

count = dataTable.DefaultView.ToTable(true, "employeeid").rows.count 

Dies funktioniert gut, wenn es keine NULL-Werte in der Spalte sind, aber wenn es ist, ist die Zählung durch eine hoch. Gibt es eine Möglichkeit, nullwertige Zeilen aus der Zählung zu eliminieren, oder muss ich die resultierende Tabelle durchlaufen, um nach einer möglichen Null zu suchen?

tbl = dataTable.DefaultView.ToTable(true,"employeeid") 
For Each row in tbl.rows 
... 
+0

Ich vermute, ein wenig LINQ würde Ihnen hier helfen. Ohne den Typ von jedem Teil oben von meinem Kopf zu kennen, kann ich nicht sagen, wo ich ihn platzieren soll, sondern wahrscheinlich zwischen Reihen und Zählungen. – ManoDestra

+0

@ManoDestra Sie haben Recht. Es gibt einige großartige Bibliotheken wie MoreLINQ, die helfen würden, ein Problem wie dieses zu lösen. – IdahoSixString

+0

Basic LINQ wäre ohne die zusätzliche Bibliothek jedoch ausreichend. Hier ist es nicht nötig. – ManoDestra

Antwort

2

Sie müssen möglicherweise in einen temporären Speicher aufnehmen. Ich bin mir nicht sicher über die Art, aber ein Beispiel hier ..

var dataview = new DataView(dataTable); 
dataview.RowFilter = "yourColumn != null"; 
var count = dataview.ToTable().Rows.Count; 
+0

Danke euch allen. Diese Lösung funktioniert perfekt und führte mich zu RowFilter. Dies ist Monat 2 für mich mit Visual Studio (VB.NET); Ich muss noch viel lernen. StackOverflow ist das Beste! – PaulWolt

0
DataTable table = new DataTable(); 
table.Columns.Add("employeeid", typeof(int)); 
table.Columns.Add("employeeid2", typeof(string)); 
table.Rows.Add(null, null); 
table.Rows.Add(100, "50"); 
table.Rows.Add(103, "50"); 
table.Rows.Add(101, "50"); 
table.Rows.Add(102, "52"); 


// This is if the column employeeid is a nullable value type 
var distinctCount = table.Rows.OfType<DataRow>().DistinctBy(x => x["employeeid"]).Count(x => x["employeeid"] != null); 


// This is if the column employeeid is a string type 
var distinctCount2 = table.Rows.OfType<DataRow>().DistinctBy(x => x["employeeid2"]).Count(x => !string.IsNullOrWhiteSpace(x["employeeid2"].ToString())); 

Dies wird unter Verwendung der Bibliothek MoreLinq. Sie können dieses Paket abrufen, indem Sie dieses in Ihrer Paketmanagerkonsole ausführen.

Install-Package morelinq -Version 1.4.0 
3

Sie können die DataRow Sammlung in einer Datatable in einem IEnumerable gegossen und dann Standard-Linq verwenden zu filtern, die Gruppe und die Anzahl der Gruppen zählen.

myDataTable.Rows.Cast<DataRow>() 
      .Where(r => r.Field<int?>("EmployeeID").HasValue) 
      .GroupBy(r => r.Field<int?>("EmployeeID")) 
      .Count(); 
Verwandte Themen