3

LINQPad で次の LINQ を入力し、dbcontext を使用してデータベース (SQL Server 2005) への接続を使用しました。

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

Jobs と ValuationDelays は、iJobId 列でリンクされたデータベース内のテーブルです。

LINQPad によって生成される SQL は次のとおりです。

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]

where句がないことに注意してください。LINQPad がそのようなクエリを生成する理由がわかりません。私は何を間違っていますか?

VS 2010 でデバッグすると、クエリは正常に実行され、C# コードで期待される結果が返されます。

4

1 に答える 1

3

!ValuationDelaysの代わりに持っています!j.ValuationDelays

これにより、EF がValuationDelayデータベースからすべての をロードし、ステートメント全体をメモリ内で処理するように見えます。レコードの述語に対するクエリがない理由を説明することはできませんJobが、少なくとも修正する必要があるものがあります。

于 2013-06-06T07:52:37.057 に答える