当我运行以下代码时,我得到异常“No Date方法'Parse'存在于'DateTime'类型中”:
var truncatedData = new object();
string TableName = "Products";
string ColumnName = cboAdvSearchCol1.Text.ToString();
var rawData = twr.GetType().GetProperty(TableName).GetValue(twr, null);
string query = ColumnName + ">= DateTime.Parse(" + txtAdvSearchVal1.Text +") && " + ColumnName + "< DateTime.Parse("
+ txtAdvSearchVal1.Text +").AddDays(1)";
truncatedData = ((IQueryable<object>)rawData).Where(query).ToList();//I get exception here
在调试时,我得到(字符串)查询的值为"RUNTIMESTAMP>= DateTime.Parse(7/30/2015) && RUNTIMESTAMP< DateTime.Parse(7/30/2015).AddDays(1)"
请注意我使用的是动态linq。
答案 0 :(得分:1)
您为动态表达式生成以下代码:DateTime.Parse(7/30/2015)
。但是,它没有做你期待的事情。
由于日期周围没有引号,表达式7 / 30 / 2015
被解释为整数除法,如下所示:
7 / 30 / 2015 = (7 / 30) / 2015 = 0 / 2015 = 0
因此,结果与DateTime.Parse(0)
相同,但DateTime.Parse
仅接受string
作为参数。由于找不到接受int
的方法,因此您将获得关于没有适用方法的例外情况。
调用它的正确方法是:
string query = ColumnName + ">= DateTime.Parse(\"" + txtAdvSearchVal1.Text +"\") && "
+ ColumnName + "< DateTime.Parse(\"" + txtAdvSearchVal1.Text +"\").AddDays(1)";
注意额外的"
符号以将日期用作字符串。