LINQ:在DbSet <model> .Where()中按时间比较超时

时间:2019-04-01 14:15:54

标签: linq entity-framework-core

我尝试使用EF core 2.2和Linq查询SQL数据库。

在数据库中,时间列R00090的类型为float

我使用dotnet ef dbcontext scaffold创建了DbContext和模型类。除了以下问题,一切正常。

代码段1:在2毫秒内工作

var time = (DateTime.Now - new TimeSpan(1, 0, 0)).ToOADate(); 
var test = context.TbMlr21P07
                    .OrderByDescending(e => e.R00090)
                    .Where(e => e.R00090 > (time))
                    .ToList();

代码段2:30秒后超时

var test = context.TbMlr21P07
                    .OrderByDescending(e => e.R00090)
                    .Where(e => e.R00090 > ((DateTime.Now - new TimeSpan(1, 0, 0)).ToOADate()))
                    .ToList();

我不明白为什么Linq表达式中的“时间计算”会发生超时,而使用变量时却不会?应该不像使用变量那样评估“时间计算”,然后创建查询?

我认为两个代码示例在行为上都是相同的,但是片段2抛出了超时异常:

  

System.Data.SqlClient.SqlException:'超时已过期。在操作完成之前已经过了超时时间,或者服务器没有响应。      

内部异常:   Win32Exception:等待过程被终止

内部异常翻译自德语

0 个答案:

没有答案