2014-05-19 23 views
19

我有DataTable。如何从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

编辑:

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

回答

41

您可以使用LINQ到数据表:

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

UPDATE:没有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

@TimSchmelter C#2扩展方法? :) –

+0

首先是与Linq,第二个循环。这是我想要避免的。 – Kamil

+0

@Kamil我敢打赌,原本没有循环限制。你能解释循环有什么问题吗? –