Сравнение дат с использованием LINQ to Entities (Entity Framework)

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

return All().Where(o => new DateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)

Ошибка, которую я получаю:

Поддерживаются только конструкторы без параметров и инициализаторы в LINQ to Entities

Кто-нибудь знает, как я могу это исправить?

Ответ 1

Используйте EntityFunctions. Может быть CreateDateTime.

Так может быть, вот так:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)

Update:

При использовании EF6 используйте DbFunctions.

Ответ 2

Вы можете использовать:

var result = await db.Articles
          .Where(TruncateTime(x.DateCreated) >= EntityFunctions.TruncateTime(DateTime.Now))
          .ToListAsync();

Ответ 3

Пожалуйста, используйте:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now)