在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
相关产品推荐
相关产品推荐

