Проблемы с датой даты в LINQ - PullRequest
1 голос
/ 14 января 2012

У меня есть страница ASPX, которая собирает 5 необязательных критериев поиска от пользователя и возвращает результат в виде таблицы.После того, как критерии собраны и кнопка просмотра нажата, код создает фильтр, как у нас ниже

// aSearchCriteria is a class that holds the criteria
...
string filter = string.Empty;

if (!string.IsNullOrEmpty(aSearchCriteria.RegistrationNumber)) filter =
        "f.BusinessRegistrationNumber = '" + 
        aSearchCriteria.BusinessRegistrationNumber + "'";
if (aSearchCriteria.ChangedStartDate != null && aSearchCriteria.ChangedEndDate != null)
{
   if (!string.IsNullOrEmpty(filter))
   {
       filter += " && f.ChangedDate >= '" +
                 aSearchCriteria.ChangedStartDate.ToShortDateString()  + 
                          "' && f.ChangedDate <= '" +
                aSearchCriteria.ChangedEndDate.ToShortDateString() + "'";
   }
   else
   {
       ...
   }
}
...

Using (CustomerEntities db = new CustomerEntities())
{
    if (!string.IsNullOrEmpty(filter))
    {
        filter = "f => " + filter;
        **return db.Customers.Where(filter).ToList();**
    }
    else
    ...
 }
 ...

Пример:

 "filter" value: f => f.ChangedDate > '01/01/2012' && f.ChangedDate < '14/01/2012'

Каждый раз, когда я выполняю это, я получаю это сообщение об ошибке:

Недопустимый синтаксис запроса.Ближайший термин '>', строка 6, столбец 5.

Ответы [ 2 ]

1 голос
/ 14 января 2012

вы не хотите делать фильтр строкой. Вместо этого вам следует применить фильтрацию к полученному IQueryable. Что-то вроде:

var customers = db.Customers.AsQueryable();

if (aSearchCriteria.ChangedStartDate != null && aSearchCriteria.ChangedEndDate != null)
{
    customers = customers
        .Where(c => c.ChangedDate >= aSearchCriteria.ChangedStartDate &&
                    c.ChangedDate >= aSearchCriteria.ChangedEndDate);
}

// ... apply other filters as necessary

return customers.ToList();
0 голосов
/ 15 января 2012

Если вы используете ObjectQuery.Where (строка) предикат строки должен выглядеть как

"it.ChangedDate > '01/01/2012' && it.ChangedDate < '14/01/2012'"

(без f => и псевдоним таблицы таков)

Пожалуйста, подтвердите, что это помогло:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...