如何让这个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)是导致异常的原因。

如何让这个LinqTo-Sql查询在EntityFramework4.1中工作

在不知道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的东西。