在C#中,是有可能得到从DataSet中的所有行的特定列的所有值用一个简单的指令(没有LINQ,没有找到cicle)?
Answer 1:
只有通过循环行,如Utaal在这个答案说明 。
你可能认为DataTable.DefaultView.RowFilter
将支持分组,但它不(它主要提供同等功能的的Where
条款,有一些基本的聚集-尽管不是简单的分组)。
Answer 2:
为什么没有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扩展方法 。 否则,你可以施放Rows
的财产DataTable
类型DataRow
(你没有与查询语法要做到这一点,因为它会自动为你施放)。
Answer 3:
据我知道有没有直接的办法让那些; 但for循环是非常简单的,显然不会消耗更多的资源比什么都重要。
Answer 4:
除了Utaal的答案,你都不可能填充与选择从您的原始数据源只有一个列的查询结果的新的DataTable对象,假设它是一个RDBMS。 这有让你指定的东西,很容易在代码中表达,但容易在像SQL来表达的优势DISTINCT
查询。
文章来源: Get all values of a column from a DataSet