我尝试使用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:等待过程被终止
(内部异常翻译自德语)