C# 如何从DataTable中获取一列值的列表?

C# 如何从DataTable中获取一列值的列表?,c#,datatable,c#-2.0,C#,Datatable,C# 2.0,我有数据表 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值的列表 我可以在没有Linq的情况下对数据表中的所有行进行循环吗 编辑: 经过与Serg

我有数据表

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值的列表

我可以在没有Linq的情况下对数据表中的所有行进行循环吗

编辑:


经过与Sergei的小讨论,我决定无论如何都要使用循环。

您可以使用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"]);
注意:为了提高效率,最好使用行[index]而不是行[columnName]。第一个只是从columns数组中按索引获取列。后者从将名称映射到索引的内部字典中获取列索引,然后才逐个索引获取列

另一件需要注意的事情是使用行数初始化列表的容量。若您不这样做,那个么列表的内部数组将根据行数重新创建和复制多次

最后要说的是,若可能的话,使用大型表的最有效方法是在服务器端过滤数据

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


@具有C2?的TimSchmelter延拓方法:第一个是Linq,第二个是loop。这就是我想要避免的。@Kamil我打赌最初没有循环限制。你能解释一下循环有什么问题吗?当我编辑时,我的问题文本没有改变——我只是在这些限制上加了粗体字。你可以点击编辑。。。请不要删除此答案,它不适合我,但可能有人会需要它。此答案有两个问题:1 LINQ在C 2.0/.NET Framework 2.0中不可用。2 OP明确表示他们不想使用LINQ。
int[] ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToArray();