C# 如何使这个Linq到Sql查询在实体框架4.1中工作?
所以我一直在尝试将我的L2S代码转换为EF4.1,主要是因为L2S的模式更新变得非常困难。不幸的是,EF的linq功能似乎非常缺乏,我不确定如何在EF中编写此查询,因为您似乎无法在EF中执行日期算术。我的Linq到Sql代码是:C# 如何使这个Linq到Sql查询在实体框架4.1中工作?,c#,entity-framework,entity-framework-4.1,C#,Entity Framework,Entity Framework 4.1,所以我一直在尝试将我的L2S代码转换为EF4.1,主要是因为L2S的模式更新变得非常困难。不幸的是,EF的linq功能似乎非常缺乏,我不确定如何在EF中编写此查询,因为您似乎无法在EF中执行日期算术。我的Linq到Sql代码是: // Check for any scheduled requests that have not started within the last 24 hours since the scheduled time on the previous day DateTim
// 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();
这是为了让系统每天在预定时间运行自动化测试。此查询背后的基本思想是,我检索至少运行过一次的测试请求,这些请求的计划时间为Previor now,以及自上次计划时间以来未运行的测试请求
此查询在\u上下文
连接到L2S数据上下文时非常有效,但在针对我的EF 4.1DbContext
使用时,我得到一个ArgumentException
,消息是DbArithmeticExpression参数必须具有数字公共类型。
有人知道为什么这不起作用吗?我如何为EF 4.1解决这个问题
编辑:
更具体地说,EF似乎无法执行日期算术,导致异常的原因是
(currentDate+x.scheduled\u time.Value)
。如果不知道scheduled\u time
字段的数据类型,我会怀疑错误行是您尝试计算的两行:
currentDate + x.scheduled_time.Value
我可以想象,您正试图将TimeSpan
添加到DateTime
对象中,这在EF4.1中会导致某种类型的不匹配。为什么不打开currentDate
,看看这是否更有效:
currentDate.Add(x.scheduled_time.Value)
在不知道
scheduled_time
字段的数据类型的情况下,我怀疑错误的行是您尝试计算的两行:
currentDate + x.scheduled_time.Value
我可以想象,您正试图将TimeSpan
添加到DateTime
对象中,这在EF4.1中会导致某种类型的不匹配。为什么不打开currentDate
,看看这是否更有效:
currentDate.Add(x.scheduled_time.Value)
签出。在EF中尝试执行日期函数时,它们可能会帮助您。我经常使用DatePart的内容。签出。在EF中尝试执行日期函数时,它们可能会帮助您。我经常使用DatePart内容。
scheduled\u time
是POCO类中的DateTime字段,是POCO类中的time(7)
字段database@Kall:在这种情况下,您应该知道默认情况下,Time(7)
不会转换为自动生成类中的DateTime
成员,而是一个TimeSpan
成员。在这种情况下,您应该使用.Add()
方法。验证成员类型以查看它是否确实是TimeSpan
。我已经相应地更新了我的答案,如果是这样的话就可以使用它。我的错误是,Poco是一个TimeSpan?
而不是DateTime
@Kall:我预料到了。它实际上解释了由于您试图将TimeSpan添加到不同的DateTime中,因此添加操作中的参数必须具有数字公共类型的期望值。请尝试我最近在DateTime对象上使用Add方法对代码进行的编辑。不,这不起作用。除“LINQ to Entities不识别方法'System.DateTime Add(System.TimeSpan)'外,此方法不能转换为存储表达式。”blahscheduled_time
是POCO类中的日期时间字段,是POCO类中的time(7)
字段database@Kall:那样的话,您应该知道,默认情况下,Time(7)
不会转换为自动生成类中的DateTime
成员,而是转换为TimeSpan
成员。在这种情况下,您应该使用.Add()
方法。验证成员类型以查看它是否确实是TimeSpan
。我已经相应地更新了我的答案,如果是这样的话就可以使用它。我的错误是,Poco是一个TimeSpan?
而不是DateTime
@Kall:我预料到了。它实际上解释了由于您试图将TimeSpan添加到不同的DateTime中,因此添加操作中的参数必须具有数字公共类型的期望值。请尝试我最近在DateTime对象上使用Add方法对代码进行的编辑。不,这不起作用。“LINQ to Entities无法识别方法'System.DateTime Add(System.TimeSpan)'方法,并且此方法无法转换为存储表达式。”blahWhat是scheduled_time的数据时间?scheduled_time是POCO中的TimeSpan?
(对于CodeFirst)和时间(7)在MSSQL中,计划时间的数据时间是多少?计划时间是POCO中的TimeSpan?
(对于CodeFirst)和MSSQL中的时间(7)!虽然这些功能让事情变得有点难做。哦,好链接!尽管这些函数让事情变得更难做。