从DataSet获取列的所有值

在C#中,是否可以使用简单的指令从DataSet的所有行获取特定列的所有值(没有LINQ,no for cicle)?

正如Utaal在这个答案中指出的那样,只能通过遍历行。

您可能希望DataTable.DefaultView.RowFilter支持分组,但它不支持(它主要提供Where子句的等效function,具有一些基本聚合 – 尽管不是简单的分组)。

为什么没有LINQ? 对于没有相同限制的人来说,这里有三种方法,底部两种都使用LINQ。

C#

 List colValues = new List(); //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 

要在DataTable上使用AsEnumerable方法,您必须具有对System.Data.DataSetExtensions的引用,该引用添加LINQ扩展方法 。 否则,您可以将DataTableRows属性转换为DataRow类型(您不必使用Query语法执行此操作,因为它会自动为您投射)。

据我所知,没有直接的方法来获得这些; 但for循环非常简单,显然不会比其他任何东西更耗费资源。

除了Utaal的答案之外,您可以使用查询结果填充新的DataTable对象,该查询仅从原始数据源中选择一列,假设它是RDBMS。 这样做的好处是可以让您指定易于在代码中表达的内容,但很容易在SQL中表达,如DISTINCT查询。