在Web API中使用LINQ从DataTable选取特定列插入另一DataTable
直接用LINQ筛选DataTable列并插入目标DataTable的实现方法
不需要先把DataTable转成列表,有两种更直接的方式实现需求:
方法一:LINQ投影+CopyToDataTable快速生成目标表
如果目标DataTable还未创建,或者需要直接生成结构匹配的结果表,可以用这种方式:
// 从源表投影出需要的三列,自动生成对应结构的DataTable var filteredTable = sourceTable.AsEnumerable() .Select(row => new { ID = row.Field<int>("ID"), // 替换为实际列类型 Name = row.Field<string>("Name"), PhNumber = row.Field<string>("PhNumber") }) .CopyToDataTable(); // 若已有预先创建好结构的targetTable,直接导入行即可 targetTable.Merge(filteredTable);
方法二:直接遍历LINQ结果插入目标表
如果目标DataTable的结构已经提前定义完成,直接遍历源表行并插入更高效:
foreach (var sourceRow in sourceTable.AsEnumerable()) { DataRow newRow = targetTable.NewRow(); // 赋值目标表的三列 newRow["ID"] = sourceRow["ID"]; newRow["Name"] = sourceRow["Name"]; newRow["PhNumber"] = sourceRow["PhNumber"]; targetTable.Rows.Add(newRow); }
关键说明
AsEnumerable()方法将DataTable转换为可LINQ查询的IEnumerable<DataRow>集合,是LINQ操作DataTable的基础。Field<T>()用于强类型获取列值,避免隐式类型转换带来的异常,建议根据实际列类型替换泛型参数。- 两种方法都无需额外将DataTable转成自定义列表,直接基于DataRow进行操作,更贴合DataTable的原生用法。
内容的提问来源于stack exchange,提问作者Fortunate Lucy
相关产品推荐
相关产品推荐

