В своем приложении я использую Entity Framework.
Мой стол
-Article
-period
-startDate
Мне нужны совпадающие записи => DateTime.Now > startDate and (startDate + period) > DateTime.Now
Я пробовал этот код, но теперь он работает
Context.Article
.Where(p => p.StartDate < DateTime.Now)
.Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now)
Когда я запускаю свой код, возникает следующее исключение
LINQ to Entities не распознает метод System.DateTime AddDays (Double), и этот метод нельзя преобразовать в выражение хранилища.
c#
linq
entity-framework
datetime
Yucel
источник
источник
period
?AddDays
неправильная функция, если этоdouble
.Ответы:
При использовании LINQ to Entity Framework ваши предикаты внутри предложения Where переводятся в SQL. Вы получаете эту ошибку, потому что нет перевода на SQL,
DateTime.Add()
который имеет смысл.Быстрый обходной путь - прочитать результаты первого оператора Where в память, а затем использовать LINQ to Objects для завершения фильтрации:
Вы также можете попробовать метод EntityFunctions.AddDays, если используете .NET 4.0:
Примечание:
EF 6
сейчасSystem.Data.Entity.DbFunctions.AddDays
.источник
Я думаю, что это то, что пытался предложить последний ответ, но вместо того, чтобы пытаться добавить дни в p.startdat (что-то, что не может быть преобразовано в оператор sql), почему бы не сделать что-то, что можно приравнять к sql:
источник
EntityFunctions
решение. Здесь второй операнд не извлекается из другого объекта в запросе и может быть вычислен до запроса. Если бы оба операнда были найдены в db,EntityFunctions
решение все равно было бы подходящим, в то время как решение этого ответа больше не работало бы.Как насчет того, чтобы вычесть 2 дня из DateTime.Now:
Честно говоря, я не уверен, чего вы пытаетесь достичь, но это может сработать
источник
Если вам нужно, чтобы ваше выражение было переведено на SQL, вы можете попробовать использовать
System.Data.Entity.Core.Objects.AddDays метод.
На самом деле отмечен как устаревший, но он работает. Его следует заменить на System.Data.Entity.DbFunctions.AddDays, но я не могу его найти ...
источник