如何从DataTable获取一个列值的列表?

时间:2014-05-19 10:48:11

标签: c# datatable c#-2.0

我有DataTable。

DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("name", Type.GetType("System.String")));
// more columns here

我需要" id"的列表值。

我可以在我的DataTable中的所有行没有循环没有Linq 吗?

编辑:

经过与Sergei的小讨论后,我决定使用循环。

2 个答案:

答案 0 :(得分:56)

您可以将Linq用于DataTable:

var ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList();

更新:没有Linq

List<int> ids = new List<int>(dt.Rows.Count);
foreach(DataRow row in dt.Rows)
    ids.Add((int)row["id"]);

注意效率最好使用row[index]代替row[columnName]。第一个只是从列数组中获取索引列。 Latter从内部字典中获取列索引,该列表将名称映射到索引,然后才逐列索引。

需要注意的另一件事是使用行计数初始化列表的容量。如果您不这样做,那么将重新创建并复制内部列表数组(取决于行数)。

最后要说的是 - 使用大表(如果可能的话)最有效的方法是在服务器端过滤数据。

答案 1 :(得分:0)

List<int> ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList();

OR

int[] ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToArray();