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

在DataTable中按条件统计行数时使用列名出现编译错误的问询

解决DataTable.Select编译错误:"The name dateasstring does not exist in the current context"

嘿,这个问题我太懂了!你遇到的编译错误根源有两个:

  • 你把DataTable里的列名dateasstring直接当成了C#本地变量来用,编译器根本找不到这个变量,自然报错;
  • 你误把C#代码(比如Split('/'))写到了DataTable.Select的筛选表达式里,但这个表达式用的是DataTable自己的语法规则,不是执行C#代码。

下面给你两种靠谱的解决办法:

方法一:用DataTable内置表达式语法筛选

DataTable的筛选表达式支持一些内置函数,比如SUBSTRING,可以用来提取字符串的指定部分。假设你的dateasstring列格式是MM/dd/yyyy(月份在前,比如05/20/2024),可以这么写:

string twodigmonth = DateTime.Now.ToString("MM");
// 提取dateasstring列前2位(月份),和当前月份比较
DataRow[] testRows = dataTable1.Select($"SUBSTRING(dateasstring, 1, 2) = '{twodigmonth}'");

如果你的日期格式是dd/MM/yyyy(日期在前),那要提取第4到第5位的月份:

DataRow[] testRows = dataTable1.Select($"SUBSTRING(dateasstring, 4, 2) = '{twodigmonth}'");

方法二:用Linq查询(更灵活)

如果你觉得DataTable的表达式语法不够灵活,用Linq可以直接写C#逻辑,还能轻松处理空值:

string twodigmonth = DateTime.Now.ToString("MM");
var testRows = dataTable1.AsEnumerable()
    // 先获取列值,拆分后取第一部分,和当前月份比较
    .Where(row => row.Field<string>("dateasstring")?.Split('/')[0] == twodigmonth)
    .ToArray();

这里的?.是为了避免列值为null时抛出空引用异常,非常实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:25