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

C#中如何查找DataTable中匹配文本框输入Email值的行?

问题:DataTable根据邮箱匹配行数据并返回UI

我有一个名为dt的DataTable,包含firstname、lastname、companymname和emailId列,共N行数据。用户在文本框输入邮箱地址,我在C#类函数中获取该值并赋值给emailaddress变量,需要将emailaddress与emailId列的值逐一比对,匹配的话就把整行数据通过ViewBag返回给UI。

现有代码:

var dt = ExcelDataToDataTable(fileName, "Sheet1");
var emailaddress = emailaddress ;
DataRow[] result = dt.Select("Email = emailaddress");

现有代码问题说明

  1. 列名错误:DataTable中的目标列是emailId,代码里写成了Email,名称不匹配会导致找不到列。
  2. 变量引用错误:Select方法的字符串参数里直接写emailaddress会被当成字面量,不会读取变量的值,匹配逻辑完全失效。
  3. 变量赋值错误:var emailaddress = emailaddress;是无效的自赋值,需要替换成实际获取用户输入的代码。

修正后的代码方案

方案1:修正DataTable.Select语句

var dt = ExcelDataToDataTable(fileName, "Sheet1");
// 替换成实际获取用户输入邮箱的代码,比如从请求参数中获取
var emailaddress = Request.Form["emailInput"]; 
// 修正列名,同时转义单引号避免语法错误
DataRow[] result = dt.Select($"emailId = '{emailaddress.Replace("'", "''")}'");
// 将匹配的第一行存入ViewBag(有多行匹配可根据需求调整)
ViewBag.MatchedRow = result.FirstOrDefault();

方案2:使用LINQ查询(更推荐)

LINQ方式类型安全,无需处理字符串转义,可读性更高:

var dt = ExcelDataToDataTable(fileName, "Sheet1");
var emailaddress = Request.Form["emailInput"];
// 用LINQ筛选匹配的行
var matchedRow = dt.AsEnumerable()
                   .FirstOrDefault(row => row.Field<string>("emailId") == emailaddress);
// 将结果存入ViewBag
ViewBag.MatchedRow = matchedRow;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:05:10