You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# Lambda替代循环将DataTable列值存入数组?

用Lambda表达式将DataTable列值转为数组

Hey Bill, 我懂你想摆脱循环、用Lambda实现需求的心情,这就给你捋清楚!

其实用LINQ结合Lambda就能轻松搞定,核心思路就是把DataTable转成可枚举的行集合,提取目标列的值后直接转成数组。这里分几种常见场景给你举例:

1. 提取字符串类型的列值

假设你的DataTable叫dt,目标列名为"TargetColumn",代码可以这么写:

string[] columnValues = dt.AsEnumerable()
                          .Select(row => row["TargetColumn"].ToString())
                          .ToArray();

2. 提取数值类型(比如int)的列值

如果列是整数类型,记得做类型转换避免装箱拆箱:

int[] columnValues = dt.AsEnumerable()
                       .Select(row => Convert.ToInt32(row["TargetColumn"]))
                       .ToArray();

简单拆解每一步:

  • dt.AsEnumerable():把DataTable转换成IEnumerable<DataRow>,这样就能用LINQ的链式方法了
  • Select(row => row["TargetColumn"].XXX):用Lambda遍历每一行,提取指定列的值并转换成你需要的类型
  • .ToArray():把最终的枚举集合直接转成数组,一步替代显式循环

要是你原来的循环写法是这样的:

List<string> valuesList = new List<string>();
foreach(DataRow row in dt.Rows)
{
    valuesList.Add(row["TargetColumn"].ToString());
}
string[] columnValues = valuesList.ToArray();

那上面的Lambda写法就是把整个流程浓缩成了链式调用,完全消除了显式循环,是不是清爽多了?

如果你的列可能存在DBNull的情况,还可以加个空值判断兜底:

string[] columnValues = dt.AsEnumerable()
                          .Select(row => row["TargetColumn"] != DBNull.Value ? row["TargetColumn"].ToString() : string.Empty)
                          .ToArray();

这样就覆盖大部分场景啦,希望对你的Lambda学习有帮助!

内容的提问来源于stack exchange,提问作者WDrago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:36:01