2009-07-03 76 views

回答

2

只能遍歷行,如Utaal noted in this answer

您可能認爲DataTable.DefaultView.RowFilter將支持分組,但它不支持它(它主要提供Where子句的等效功能,包含一些基本聚合 - 雖然不是簡單的分組)。

3

據我所知,沒有直接的方法來獲得這些;但for循環非常簡單,顯然不會比其他任何東西更耗費資源。

+0

這就是我的想法。我希望這可以成爲一種方式。謝謝。 – 2009-07-03 17:04:55

0

除了Utaal的回答,您可以使用查詢的結果填充新的DataTable對象,該查詢只選擇原始數據源中的一列,假設它是RDBMS。這樣做的好處是可以讓你指定易於在代碼中表達的東西,但易於在SQL中表達,如DISTINCT查詢。

11

爲什麼不使用LINQ?對於沒有相同限制的人來說,這裏有三種方法可以做到這一點,最底層的兩種都使用LINQ。

C#

List<object> colValues = new List<object>(); 

//for loop 
foreach (DataRow row in dt.Rows) { 
    colValues.Add(row["ColumnName"]); 
} 

//LINQ Query Syntax 
colValues = (from DataRow row in dt.Rows select row["ColumnName"]).ToList(); 

//LINQ Method Syntax 
colValues = dt.AsEnumerable().Select(r => r["ColumnName"]).ToList(); 

VB

Dim colValues As New List(Of Object) 

'for loop 
For Each row As DataRow In dt.Rows 
    colValues.Add(row("ColumnName")) 
Next 

'LINQ Query Syntax 
colValues = (From row As DataRow In dt.Rows Select row("ColumnName")).ToList 

'LINQ Method Syntax 
colValues = dt.Rows.AsEnumerable.Select(Function(r) r("ColumnName")).ToList 

要使用AsEnumerable方法上DataTable,你必須有一個參考其添加System.Data.DataSetExtensions LINQ extension methods。否則,只需將DataTableRows屬性作爲DataRow類型(您不必使用查詢語法執行此操作,因爲它會自動爲您投射)。

+0

我無法在過時的.NET Compact Framework應用程序中使用LINQ。但是你的答案可能對其他人有用。 – 2013-07-11 18:14:09