[英]Getting duplicates count for each distinct value from a datatable
我有一個數據表,其中只有一個文本列“標題”,可以有多個重復值。 我可以使用dataview刪除重復項。
DataView v = new DataView(tempTable);
tempTable = v.ToTable(true, "Title");
但是,如何在沒有任何循環的情況下獲取每個不同值的重復項數量?
如果您不想循環或使用Linq,則無法執行此操作,但是您可以在數據表上使用帶條件的計算列(如果適用)。 那就是數據應該在兩個相關的表中,像這樣。
DataRelation rel = new DataRelation("CustToOrders", data.Tables["Customers"].Columns["customerid"], data.Tables["Orders"].Columns["customerid"]);
data.Relations.Add(rel);
給定customerid字段作為Orders表中的外鍵,因此它具有重復項。 您可以通過以下方式獲取重復項的數量:
data.Tables["Customers"].Columns.Add("Duplicates",
GetType(Decimal), "Count(child.customerid)");
我獲得所需結果的方式將如下所示:
tempTable.Rows.Cast<DataRow>()
.Select(dr => Convert.ToString(dr[0]))
.GroupBy(dr => dr)
.Select(g => new { Title = g.Key, Count = g.Count() });
但是,它實際上是在后台循環播放。 實際上,如果不檢查每條記錄,我想不出一種進行此類分組的方法。
缺點是該表達式的結果是一系列匿名類型實例。 如果仍然希望結果為DataView,則可以重寫最后一個Select,以創建具有兩列的新DataRow,然后將它們推到新的DataTable中,然后將其傳遞給DataView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.