Oracle.ManagedDataAccess взрывается на DbFunctions.CreateDate - PullRequest
1 голос
/ 25 июня 2019

У меня есть запрос EF, в котором мне нужно получить первый день месяца в коллекции сущностей DateTime. Это использует Linq to Entities (если бы это был Linq to Objects, я бы просто создал новый DateTime). Это в основном код, который я использую:

dbContext.Calendar
    .Select(date => DbFunctions.CreateDateTime(date.Year, date.Month, 1, 0, 0, 0))
    .ToList();

Это приводит к следующей ошибке: ORA-01841: (full) year must be between -4713 and +9999, and not be 0

Однако, глядя на поступающие данные, самое близкое, что я вижу за год 0, это 2000, но это происходит, даже если я ограничиваю его не 2000 годом.

Кроме того, dbContext.Calendar.ToList(); работает просто отлично, но это не дает мне первого месяца.

Это известная ошибка? Есть ли лучший способ найти первое число месяца? Есть ли лучший способ создания экземпляров DateTimes в Linq to Entities для базы данных Oracle?

Спасибо.

1 Ответ

0 голосов
/ 26 июня 2019

Я всегда ненавижу это, когда ответ смотрит мне прямо в лицо, и я скучаю по нему снова и снова.В этом случае решение было AsEnumerable().После этого вы используете Linq to Objects, а не Linq to Entities, поэтому вы можете создать экземпляр DateTime, как обычно.

dbContext.Calendar
    .AsEnumerable()
    .Select(date => new DateTime(date.Year, date.Month, 1))
    .ToList();
...