如何使用LINQ获取ID列表并将其转换为整数类型

10

我有一个数据表 DataTable,我们称之为 pdt,在我的代码中。我只想选择所有的 table["id"],并将它们填充到一个整数数组中。

我可以使用 foreach 进行操作,但我正在尝试学习 Lambda 表达式。我无法弄清楚如何处理这个问题。

我已经尝试过:

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

但是似乎什么都不起作用。我很确定这是一个基础问题,请帮助一位新手。


1
现在你可以这样做:var ids = yourObject.Select(x =>x.Id).ToList(); - NoWar
这应该是答案。 - Shekhar Reddy
2个回答

26
如果您想要一个数组,您需要使用ToArray()扩展方法...但您还想使用DataTableExtensions.AsEnumerable()扩展方法,以使数据表在DataRow序列方面强类型化:
int[] ids = pdt.AsEnumerable()
               .Select(r => (int) r["Id"])
               .ToArray();

编辑:正如abatishchev的回答中所指出的,这里替代显式转换的另一种方法是使用DataRowExtenions中的Field<T>扩展方法:

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

2

使用类型安全的调用:

r.Field<string>("Id")

1
我认为这与那个完全不同。那是将字符串数组转换...而这是将数据表中每行的“Id”字段转换。特别地,我不相信你的代码会起作用,因为我们所知道的输入只有“pdt”变量 - “r”仅被引入作为lambda表达式参数。 - Jon Skeet
1
如果您已经投票将其关闭为重复项,为什么还要添加答案呢? - ChrisF
@Jon:你说得对。AsEnumerable() + Select() 是 OP 需要的。 - abatishchev
@Jon:无论如何,我看到了许多类似的问题,这个是重复的不是我的,而是另一个问题的副本 :) - abatishchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接