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

C#使用LINQ查询含'-'字符的DataTable列报错如何解决

报错原因

DataTable.Select() 所用的过滤表达式有独立的解析规则,连字符 - 在规则中属于算术减号运算符,因此表达式里写 SUB-CATEGORY 时,解析器会把它判定为「取SUB列的值减去CATEGORY列的值」的运算逻辑,查找不到名为SUB的列时就会抛出对应错误。

解决方法
  • 适配现有代码的最小修改:对包含特殊字符(连字符、空格、关键字冲突等)的列名,用方括号[]包裹,显式声明这是完整列名即可。
    修正后的代码:
DataRow[] matches = myTable.Select("[SUB-CATEGORY] = '" + sc + "' AND BW = '" + bw + "'");
  • 补充转义注意:如果传入的参数sc、bw本身包含单引号,需要先将单引号替换为两个连续单引号做转义,否则会触发表达式语法错误,处理示例:
sc = sc.Replace("'", "''");
bw = bw.Replace("'", "''");
DataRow[] matches = myTable.Select("[SUB-CATEGORY] = '" + sc + "' AND BW = '" + bw + "'");
  • 不想记忆过滤表达式的特殊规则的话,可以直接使用标准LINQ to DataSet写法,这类写法直接按字符串匹配列名,不会把连字符识别为运算符,不需要额外包裹列名:
DataRow[] matches = myTable.AsEnumerable()
    .Where(r => r.Field<string>("SUB-CATEGORY") == sc && r.Field<string>("BW") == bw)
    .ToArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:27:40