Сравнение дат с использованием 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)