2015-08-05 3 views
2

я получаю исключение «по типу„DateTime“Нет применимый метод„Анализировать“существует», когда я запускаю следующий код:не применяется метод «Анализировать» не существует в типе «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 

во время отладки, Я получаю значение (string) query как "RUNTIMESTAMP>= DateTime.Parse(7/30/2015) && RUNTIMESTAMP< DateTime.Parse(7/30/2015).AddDays(1)" Обратите внимание, что я использую динамический linq.

+4

Не знаком с динамическим LINQ, но не '7/30/2015' должен быть в кавычках, чтобы он был действителен для' Parse', так как это берет 'string'? –

+0

Я пробовал, ставя котировки тоже, не работал. – Paradox

ответ

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

Обратите внимание на дополнительные " символы использовать дату в виде строки.

+0

Я пробовал это до публикации здесь, это тоже не сработало. В этом случае он дает исключение: LINQ to Entities не распознает метод «System.DateTime Parse (System.String)», и этот метод не может быть переведен в выражение хранилища. Кроме того, запрос формируется следующим образом: «RUNTIMESTAMP> = DateTime.Parse (\" 7/30/2015 \ ") && RUNTIMESTAMP Paradox

+0

@Paradox, да, это другая ошибка, на которую, как мне кажется, ответили ранее на сайте. Я не помню подробностей, но в основном это означает, что LINQ to Entities не знает, как сопоставить метод с SQL-запросом. –

Смежные вопросы