簡體   English   中英

為數據表中的每個不同值獲取重復計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM