从DataSet获取列的所有值

时间:2009-07-03 16:36:38

标签: c# dataset

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

4 个答案:

答案 0 :(得分:12)

为什么没有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。否则,您可以将Rows的{​​{1}}属性转换为类型DataTable(您不必使用查询语法执行此操作,因为它会自动为您投射)。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

仅迭代行,Utaal noted in this answer

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

答案 3 :(得分:0)

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