Sql LINQPad-无法理解生成的查询
我在LINQPad中键入以下LINQ,并使用dbcontext连接到我的数据库SQLServer2005Sql LINQPad-无法理解生成的查询,sql,sql-server,linq,entity-framework,linqpad,Sql,Sql Server,Linq,Entity Framework,Linqpad,我在LINQPad中键入以下LINQ,并使用dbcontext连接到我的数据库SQLServer2005 from j in Jobs where j.dValuationDate.HasValue && j.dValuationDate.Value > EntityFunctions.AddDays(DateTime.Now, -7).Value && j.dValuationDate.Value < EntityFunctions.AddHours
from j in Jobs
where j.dValuationDate.HasValue && j.dValuationDate.Value > EntityFunctions.AddDays(DateTime.Now, -7).Value &&
j.dValuationDate.Value < EntityFunctions.AddHours(DateTime.Now, -1).Value &&
j.bXMLServiceProviderID.HasValue && j.bXMLServiceProviderID.Value == 1 &&
!ValuationDelays.Any(x => x.iJobID == j.iJobID && x.iStatusID == 5)
select j.iJobID
注意没有where子句。我不明白LINQPad为什么会生成这样的查询。我做错了什么
当我在VS 2010中调试时,查询运行良好,并以C代码返回预期结果。您得到了!估价延迟代替了!j、 估值延迟
看起来这会导致EF从数据库中加载所有赋值延迟,并在内存中处理整个语句。我无法解释为什么没有对作业记录上的谓词进行查询,但至少您现在需要纠正一些问题。SQL中的select语句完全搞乱了。它应该只选择iJobID…opun进一步检查,这两个语句根本不匹配。选择错误,并且From不是同一个表!请尝试再次运行Linq查询,并确保它更新的SQL resultValuationDelays不是作业表的一部分。这是一张单独的桌子,就像乔布斯一样。我想在这里写一个notexists子句。italic_不存在从估值延迟中选择1,其中iJobID=j.iJobID和iStatusID=5_italic对不起,我明白你在这里说的。我应该通过jobs外键j.ValuationDelays来引用它,而不是直接引用ValuationDelays。我会检查并接受答案或回复。好的,这样就行了。我现在也不需要x.iJobId==j.iJobId。缩写版本是:从作业中的j开始,其中j.dValuationDate.HasValue&&j.dValuationDate.Value>EntityFunctions.AddDaysDateTime.Now,-7.Value&&j.dValuationDate.Value
SELECT
[Extent1].[iDelayID] AS [iDelayID],
[Extent1].[iJobID] AS [iJobID],
[Extent1].[sReasonforDelay] AS [sReasonforDelay],
[Extent1].[dDateTime] AS [dDateTime],
[Extent1].[iStaffID] AS [iStaffID],
[Extent1].[iStatusID] AS [iStatusID],
[Extent1].[dSentDate] AS [dSentDate],
[Extent1].[yValExDelayReasonID] AS [yValExDelayReasonID],
[Extent1].[dDelayedUntilDate] AS [dDelayedUntilDate],
[Extent1].[dValuationDate] AS [dValuationDate],
[Extent1].[valexActionUpdateId] AS [valexActionUpdateId],
[Extent1].[valexAppointmentReasonId] AS [valexAppointmentReasonId]
FROM [dbo].[ValuationDelays] AS [Extent1]