2010-08-08 86 views
0

我有一個數據表,它有一個單一的文本列「標題」,它可以有多個重複的值。我可以使用數據視圖刪除重複項。從數據表中獲取每個不同值的重複計數

DataView v = new DataView(tempTable); 
tempTable = v.ToTable(true, "Title"); 

但是我怎樣才能得到沒有任何循環的每個不同值的重複次數?

回答

1

如果你不想循環或使用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)"); 
0

的方式,我會得到你想要看起來像這樣的結果:

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,並將它們推送到傳遞給DataView的新DataTable中。

+1

我不幸地使用Linq。 – NLV 2010-08-08 14:54:13

+0

你可以用'tempTable.AsEnumerable()'替換'tempTable.Rows.Cast ()' – 2010-08-09 11:58:35