我有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的小讨论后,我决定使用循环。
答案 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();