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

Kam*_*mil 35 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
Run Code Online (Sandbox Code Playgroud)

我需要"id"值列表.

我可以在没有循环遍历DataTable中的所有行且没有Linq的情况下执行此操作吗?

编辑:

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

Ser*_*kiy 68

您可以将Linq用于DataTable:

var ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList();
Run Code Online (Sandbox Code Playgroud)

更新:没有Linq

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

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

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

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