Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使这个Linq到Sql查询在实体框架4.1中工作?_C#_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

C# 如何使这个Linq到Sql查询在实体框架4.1中工作?

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

所以我一直在尝试将我的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
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.1
DbContext
使用时,我得到一个
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)'外,此方法不能转换为存储表达式。”blah
scheduled_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)!虽然这些功能让事情变得有点难做。哦,好链接!尽管这些函数让事情变得更难做。