Сравните дату в linq

У меня есть строка 31-10-2014, которую я хочу сравнить со значением в базе данных.

public ActionResult SearchResult(string searchDate)
{
    var bookings = from m in db.Bookings
                   select m;
    if (!String.IsNullOrEmpty(searchDate))
    {
        bookings = bookings.Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);
    }
    return View(bookings);
}

сравнение продолжает терпеть неудачу. Как мне сравнить дату ввода со значением базы данных (я оставил попытку try для проверки ввода как времени данных, поэтому пример более понятен)

Я получаю сообщение (даже без searchData):

Linq не распознает метод ParseExact.

4 ответа

Решение

Пытается компилировать DateTime.ParseExact в SQL, и не удалось. Все, что вам нужно, это определить переменную и поместить значение в эту переменную, а затем использовать переменную в вашем запросе:

if (!String.IsNullOrEmpty(searchDate))
{
    DateTime dt = DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture);
    bookings = bookings.Where(s => s.Date1 >= dt);
}

Это зависит от того, что переменная db является. Если это LINQ to SQL DataContext или EF DBContext, вы не можете использовать методы, которые вы используете на дату; нет поддержки. Смотрите это. Есть функции SQL, чтобы обойти эту проблему.

Если вы хотите использовать сырой SQL для дат, используйте класс EntityFunctions, который позволяет сравнивать даты. CompareTo также не поддерживается, поэтому вам придется использовать традиционный более чем.

Чтобы сделать это проще, попробуйте это:

bookings = bookings.ToList().Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture)) >= 0);

Поместите его первым в списке, чтобы он не принимал DateTime.ParseExact в качестве оператора SQL, поскольку в SQL нет DateTime.ParseExact.

Надеюсь это поможет

У тебя есть - вместо = в вашем коде в строке № 7.

Вот правильный код.

public ActionResult SearchResult(string searchDate)
{
    var bookings = from m in db.Bookings
                   select m;
    if (!String.IsNullOrEmpty(searchDate))
    {
        bookings = bookings.Where(s => s.Date1.CompareTo( DateTime.ParseExact(searchDate, "dd-mm-yyyy", CultureInfo.InvariantCulture) >= 0);
    }
    return View(bookings);
}
Другие вопросы по тегам