如果我通過CompiledQuery.Compile查詢了編譯實體,然後添加了另一個.Where()子句或.OrderBy()子句,那麼這些附加子句是否強制進行完全重新編譯,部分重新編譯或不重新編譯?對編譯查詢應用附加子句會導致重新編譯嗎?
回答
隨着編譯的查詢
public static Func<DataClasses1DataContext, IQueryable<ErrorLog>>
GetErrorLogs = CompiledQuery.Compile
((DataClasses1DataContext context) =>
context.ErrorLogs.Where(el => el.UserName != "foo"));
這樣調用:
using (DataClasses1DataContext context = new DataClasses1DataContext())
{
context.Log = Console.Out;
var res1 = GetErrorLogs(context).ToList();
var res2 = GetErrorLogs(context).Where(el=>el.ErrorMessage.Contains("foo")).ToList();
}
輸出是這樣
SELECT [t0].[ErrorLogID], [t0].[ErrorTime], [t0].[UserName], [t0].[ErrorNumber], [t0].[ErrorSeverity], [t0].[ErrorState], [t0].[ErrorProcedure], [t0].[ErrorLine], [t0].[ErrorMessage]
FROM [dbo].[ErrorLog] AS [t0]
WHERE [t0].[UserName] <> @p0
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [foo]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
SELECT [t0].[ErrorLogID], [t0].[ErrorTime], [t0].[UserName], [t0].[ErrorNumber], [t0].[ErrorSeverity], [t0].[ErrorState], [t0].[ErrorProcedure], [t0].[ErrorLine], [t0].[ErrorMessage]
FROM [dbo].[ErrorLog] AS [t0]
WHERE [t0].[UserName] <> @p0
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [foo]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
的唯一結論是,沒有重新編譯,但將LINQ2Objects應用於由LINQ2SQL查詢產生的對象上的.Where(el=>el.ErrorMessage.Contains("foo"))
。
完全重新編譯。
你有來源嗎? – 2010-07-15 20:50:21
我這樣做,但如果你實際上不相信你在這裏得到的答案,爲什麼要問?我可以理解某種程度的懷疑態度,但答案很容易找到,憤世嫉俗的用戶不妨去找到它。我在這裏以有經驗的開發人員的身份回答問題,而不是作爲個人圖書管理員。 – 2010-07-15 21:18:06
不幸的是,在這類問題中,很難確定您的答案在沒有采購的情況下是否正確。就我個人而言,我花了幾個小時在Google上尋找答案,但也許我的Google-fu比你的弱得多。但是,如果有其他人出現並說出另一個答案,而沒有采購,我將如何確定正確的答案?對我而言,這種類型的問題依賴於已經找到正確答案的人們以可驗證程序或源代碼答案的形式提供答案。如果你冒犯了我,我表示歉意。 – 2010-07-16 03:48:14
所有添加的子句導致不同的查詢,因此重新編譯。如果您想確認您沒有進行重新編譯,請使用.AsEnumerable()
或.ToList()
完成對查詢的調用。這實現了查詢,之後你可以做所有的訂購等你想要的。
根據您的要求,請參閱this msdn article。
- 1. 搖籃增量Java編譯導致完全重新編譯
- 2. 使安裝導致重新編譯
- 3. 在Clojure Repl中重新編譯函數會導致編譯器警告
- 4. 重新編譯編譯器對編譯後的代碼有影響嗎?
- 5. 在database.close()後編譯查詢的重新編譯
- 6. 查詢中的select語句導致無法編譯
- 7. Kohana編寫語句或查詢編譯?
- 8. EF編譯查詢偶爾會導致SqlException
- 9. 設置斷點會導致asp.net在VS2012中重新編譯
- 10. Java爲什麼不依賴常量會導致重新編譯?
- 11. cmake的變化選項不會導致重新編譯
- 12. sublime text C++編譯會導致seg fault
- 13. Boost的is_any_of會導致編譯警告?
- 14. SpecificVersion false會導致編譯錯誤
- 15. webpack手錶編譯器 - 獲取導致重新編譯的文件
- 16. 用-g編譯會導致代碼變慢嗎?
- 17. LAMBDA導致編譯錯誤
- 18. Magento編譯導致錯誤
- 19. 刪除未使用的重載會導致編譯錯誤?
- 20. 重新編譯會使用庫重載方法嗎?
- 21. Codeigniter編譯查詢
- 22. 查詢RESTRICT_REFERENCES編譯
- 23. Intellij Idea編譯器重新編譯已編譯的項目
- 24. 添加包含導致編譯錯誤
- 25. 添加「編譯「com.jakewharton:butterknife:8.5.1" 導致衝突
- 26. 添加AFNetworking導致編譯錯誤
- 27. 重用在編譯的查詢
- 28. 重新編譯jodatime?
- 29. 重新編譯Nginx
- 30. 重新編譯TJWS
我不知道你是如何做你的測試的,但是在編譯後的查詢之後添加一個地方肯定會導致重新編譯。 – Carvellis 2011-04-02 08:43:57