“DateTime”类型中没有适用的方法'Parse'

时间:2015-08-05 15:13:41

标签: c# datetime dynamic-linq

当我运行以下代码时,我得到异常“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。

1 个答案:

答案 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)";

注意额外的"符号以将日期用作字符串。