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

C#动态LINQ查询DataTable无结果,语法问题求助

C#动态LINQ查询DataTable无结果,语法问题求助

兄弟,我太懂你这种明明数据就在表里,动态LINQ却查不出结果的憋屈了!问题出在你写的查询语法上——DataRow的列不是它的直接属性,动态LINQ里不能像普通对象那样直接写列名,得对应普通LINQ里的Field方法调用才行。

你看你原来的查询条件写的是"City == \"Seattle\"",但DataRow本身没有叫City的公共属性,普通LINQ里我们是用s.Field<string>("City")来获取列值的,动态LINQ里也得遵循这个逻辑,把条件改成调用Field方法的形式。

给你修正一下代码:

// 注意这里要改用Field方法来指定列名
string WhereClause = "Field(\"City\") == \"Seattle\"";
var dynamicQuery = SelRecsTable.AsEnumerable().AsQueryable().Where(WhereClause).ToList();
MessageBox.Show("Total List Recs: " + dynamicQuery.Count.ToString());

要是以后需要多条件组合查询也一样,比如要同时匹配城市和年龄(假设Age是整数列),就这么写:

string WhereClause = "Field(\"City\") == \"Seattle\" && Field(\"Age\") > 30";

这里还要提醒你一个细节:如果是数值、日期这类强类型的列,动态LINQ里不用给值加引号,直接写原始类型就行;如果是字符串类型,记得要加双引号转义,就像你之前做的那样。

举个普通LINQ和动态LINQ的对应关系更清楚:

  • 普通LINQ:dt.AsEnumerable().Where(s => s.Field<string>("City") == "Seattle")
  • 动态LINQ对应写法:"Field(\"City\") == \"Seattle\""

这样改完之后,你再跑代码应该就能正确查出那8条Seattle的记录了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:09:29