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

如何从存储过程返回的DataTable中筛选指定EmployeeID的行?

解决方案

有两种简洁的方式实现你需要的DataTable筛选逻辑,以下是具体实现:

方法一:使用DataTable原生Select方法

利用DataTable.Select()构造筛选条件,将符合条件的行导入新DataTable:

在rdr.Load(cmd.ExecuteReader());之后添加以下代码:

// 定义需要保留的EmployeeID列表
var targetEmployeeIds = new[] { "1A-111", "1A-113", "1A-114" };
// 构造SQL风格的筛选表达式
string filterExpression = $"EmployeeID IN ('{string.Join("','", targetEmployeeIds)}')";
// 获取符合条件的行数组
DataRow[] filteredRows = rdr.Select(filterExpression);

// 克隆原表结构,创建空的筛选结果表
DataTable filteredDataTable = rdr.Clone();
// 将筛选后的行导入新表
foreach (DataRow row in filteredRows)
{
    filteredDataTable.ImportRow(row);
}

// 替换原来的return语句,返回筛选后的表
return filteredDataTable;

方法二:使用LINQ查询(更简洁)

需要先在文件顶部添加System.Linq引用:

using System.Linq;

然后在rdr.Load(cmd.ExecuteReader());之后添加以下代码:

// 用HashSet存储目标ID,提升查找效率
var targetIds = new HashSet<string> { "1A-111", "1A-113", "1A-114" };

// 通过LINQ筛选并生成新DataTable
DataTable filteredDataTable = rdr.AsEnumerable()
    // 先判断EmployeeID不为空,再检查是否在目标列表中
    .Where(row => !row.IsNull("EmployeeID") && targetIds.Contains(row.Field<string>("EmployeeID")))
    .CopyToDataTable();

return filteredDataTable;

注意事项

  • 确保原DataTable中存在名为EmployeeID的列,且数据类型为字符串
  • 如果EmployeeID可能存在DBNull值,LINQ方法中的!row.IsNull("EmployeeID")判断可以避免空引用异常
  • 两种方法都会保留原DataTable的列结构,仅筛选符合条件的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:20:25