Oracle.ManagedDataAccess炸毁了DbFunctions.CreateDate

时间:2019-06-25 14:39:06

标签: c# oracle entity-framework entity-framework-6 linq-to-entities

我有一个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();可以正常工作,但是并不能使我在本月的第一天。

这是一个已知的错误吗?有没有更好的方法来查找本月的第一天?有没有更好的方法可以将Linq中的DateTime实例化为Oracle DB的实体?

谢谢。

1 个答案:

答案 0 :(得分:0)

当答案盯着我时,我总是讨厌它,我又一次又一次地想念它。在这种情况下,解决方案是AsEnumerable()。之后,您将使用Linq to Objects,而不是Linq to Entities,因此您可以像往常一样实例化DateTime。

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