2011-03-14 32 views
6

我的代码中有一个DataTable,例如pdt。我只想选择所有的table["id"],然后填充整数数组。我如何获得使用LINQ的id列表作为int使用LINQ

我可以继续用foreach但我努力学习Lambda表达式。 我无法弄清楚如何处理这个问题。

我已经试过

List<int> Ids = pdt.Select(row => row["Id"]; return Convert.ToInt32(r)); 

int[] Ids = pdt.Select(row => row["Id"]); 

,但似乎没有任何工作。我很确定这是一个基本问题,请帮助新手。

+0

Nowdays你可以像'变种IDS = yourObject.Select(X => x.Id).ToList();' – 2016-04-29 17:54:59

回答

21

如果你想要一个数组,你需要使用ToArray()扩展方法......但你也使用DataTableExtensions.AsEnumerable()扩展方法,使在DataRow序列方面强类型数据表:

int[] ids = pdt.AsEnumerable() 
       .Select(r => (int) r["Id"]) 
       .ToArray(); 

编辑:正如abatishchev的回答指出,要明确投替代这里将使用Field<T>扩展方法(在DataRowExtenions):

int[] ids = pdt.AsEnumerable() 
       .Select(r => r.Field<int>("Id")) 
       .ToArray(); 
+0

excellenté,格拉西亚斯。 – iamserious 2011-03-14 12:04:13

2

使用类型安全的呼叫:

r.Field<string>("Id") 
+1

我不认为这是重复的。这是转换字符串数组...这是转换数据表中每行的“Id”字段。特别是,我不相信你的代码将工作,因为我们都知道输入的是'pdt'变量 - 'r'只引入lambda表达式参数。 – 2011-03-14 11:57:49

+1

为什么如果你已经投票决定关闭为重复添加一个答案吗? – ChrisF 2011-03-14 11:57:49

+0

@Jon:你说得对。 'AsEnumerable()'+'选择()'就是OP需要 – abatishchev 2011-03-14 12:00:33