如何让这个LinqTo-Sql查询在EntityFramework4.1中工作
本文关键字:EntityFramework4 工作 查询 LinqTo-Sql | 更新日期: 2023-09-27 17:59:59
所以我一直在尝试将L2S代码转换为EF 4.1,主要是因为L2S变得很难进行架构更新。不幸的是,EF的linq功能似乎非常缺乏,我不确定如何在EF中编写这个查询,因为你似乎无法在EF中进行日期运算。我的Linq-To-Sql代码是:
// Check for any scheduled requests that have not started within the last 24 hours since the scheduled time on the previous day
DateTime currentDate = DateTime.Now.Date;
req = _context.TestRequests.Where(x => x.scheduled_time != null
&& x.TestRequestRuns.Count > 0
// Make sure the current time is after the request's scheduled time
&& DateTime.Now > (currentDate + x.scheduled_time.Value)
// Check to see if the scheduled time today is later than the last test run start time, if so start a test run
&& (currentDate + x.scheduled_time.Value) >
x.TestRequestRuns.Where(y => !y.reran)
.OrderByDescending(y => y.start_dt)
.First().start_dt)
.OrderBy(x => x.scheduled_time)
.FirstOrDefault();
这是为了让系统在每天的预定时间运行自动测试。这个查询背后的基本思想是,我检索至少运行过一次、计划时间在现在之前的测试请求,以及自上次计划时间以来尚未运行的测试请求。
此查询与_context
完美配合。1连接到L2S数据上下文,但当用于我的EF 4.1 DbContext
时,我得到一个带有消息DbArithmeticExpression arguments must have a numeric common type.
的ArgumentException
。
有人知道为什么这不起作用吗?我如何为EF 4.1解决这个问题?
编辑:
更具体地说,EF似乎无法执行日期算术,而(currentDate + x.scheduled_time.Value)
是导致异常的原因。
在不知道scheduled_time
字段的数据类型的情况下,我会怀疑错误的行是您尝试计算的两行:
currentDate + x.scheduled_time.Value
我可以想象,您正试图将TimeSpan
添加到DateTime
对象中,这在EF4.1中给出了一种类型不匹配的情况。为什么不在currentDate
上调用.Add(),看看这是否能更好地工作:
currentDate.Add(x.scheduled_time.Value)
退房,http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.aspx.当您尝试在EF中执行Date函数时,它们可能会对您有所帮助。我经常使用DatePart的东西。