2017-04-14 54 views
1

Linq to SQL實際上並不運行sql直到枚舉結果,我得到。但是,在下面的這個例子中,什麼時候會發生?這些都被捆綁成一個巨大的查詢,這些查詢是如何嚴重地將兩個表中的大部分嚴重拉入內存,以便它可以執行最後一行?什麼時候鏈接LINQ查詢執行sql?

result = _repository.LocationHandler.Locations(id).Where(x => x.IsActive); 

paymentServiceProfiles = _repository.Context.PaymentServiceProfiles.Where(x => !x.IsDeleted && x.IsActive); 

terminals = _repository.TerminalHandler.Terminals().Where(x => x.IsActive && x.PaymentServiceProfiles.Intersect(paymentServiceProfiles).Any()); 

result = result.Where(x => terminals.Count(y => y.LocationId == x.Id) > 0); 
+0

你總是可以使用一個分析器或從上下文轉儲查詢來找出:) –

+0

在你的代碼之後(如果有的話)。 –

+0

(假設這些存儲庫屬性都返回'IQueryable') –

回答

1

所有四行只是準備'一個大'的查詢。如果稍後不使用結果數據,則根本不會執行此查詢。但是,正如其他人所提到的那樣,使用SQL Server Profiler(SSMS => Tools => Sql Server Profiler)是如何自行回答這些問題的最佳方式。

+0

謝謝,不幸的是,這是在社區服務器上,因此配置文件被擠滿了與我無關的東西,並且似乎沒有任何過濾器,所以找到我的電話(不知道他們的時間或者他們的樣子)幾乎是不可能的。 – dsmithpl13

+0

@ dsmithpl13嘗試LINQpad找出 – EJoshuaS