我有一種方法'沒有翻譯到SQL',我想在IQueryable上執行,有沒有辦法強制IQueryable執行而不必將其存儲在某些中間類中?強制執行IQueryable?
回答
問題是您希望您的方法在本地執行而不是在數據庫中執行?如果是這樣,AsEnumerable
是你的朋友。這是一個非常簡單的方法,是這樣的:
public IEnumerable<T> AsEnumerable(IEnumerable<T> source)
{
return source;
}
重要的是,它使結果IEnumerable<T>
的編譯時類型,而不是IQueryable<T>
,這意味着任何LINQ查詢操作調用後,這將是LINQ到對象而不是LINQ to SQL。
例如:
var query = context.Employees
// Filtering performed in SQL
.Where(emp => emp.IsFullTime)
.AsEnumerable()
// Projection performed locally; ComputeSalary has no
// SQL equivalent
.Select(emp => new { Employee = emp,
Salary = ComputeSalary(emp) });
你可以稱之爲ToList
其他地方的建議,但如果你正在做的過濾和並不真正需要的全名單在內存中,調用AsEnumerable
和過濾是結果將比首先加載所有內容更高效。
List<Employees> myEmployees = myqueryable.ToList();
然後你可以在你的列表上做你的LINQ的東西。
當你寫了一個查詢,LinqToSql不知道如何轉換成SQL(這也是它所說的)時,你會得到這個消息。
我不知道我明白你問什麼,但就我看,你有以下幾種選擇:
- 重寫查詢以便LinqToSql可以翻譯它
- 做的大部分的查詢,你可以在SQL Server上,然後做在內存中的剩餘部分(使用LINQ to對象)
- 坐下哭泣
假設我們排除#3,讓我們來看看其他2例子。
重寫它 - 爲了解決這個問題,我們需要你的linq查詢。
在這裏,您可以從初始查詢中取出無法翻譯的部分,然後在Iqueryable上調用ToList,然後將該查詢的其餘部分應用於該列表。
你可以執行查詢而不必存儲它嗎?那麼,不是真的,你總是可以遍歷結果,因此不會將其存儲在變量中,但顯然查詢的結果需要存儲在某個地方。
一個人不需要坐下來哭泣。 – mayu 2012-03-01 07:56:54
非常真實 - 但我覺得沒有人應該站立時哭泣。如果你不得不哭,你需要正確地做。 – kastermester 2012-03-02 00:00:30
- 1. 強制執行
- 2. 強制執行
- 3. 強制執行
- 4. 強制OnApplyTemplate執行
- 5. 強制LINQ重新執行?
- 6. 強制執行表排序
- 7. EF4 - 強制執行順序
- 8. `Any()`強制執行linq嗎?
- 9. IQueryable何時執行查詢?
- 10. 執行IQueryable對象嗎?
- 11. XML Schema強制執行子元素而不強制執行標記名稱
- 12. 在地圖上強制執行仿製
- 13. 強制執行期望的CompletableFuture行爲
- 14. 執行IQueryable時對延遲執行的細粒度控制<T>
- 15. 爲toString強制執行類型簽名
- 16. 如何強制getJSON的同步執行?
- 17. 強制執行空JSON模式
- 18. 強制執行最低版本的Maven
- 19. 強制執行JSON結果的順序
- 20. 如何強制執行到捕獲塊?
- 21. 使用knitr強制執行PDF包vignette
- 22. Travis CI是否強制執行?
- 23. 如何強制單線程執行?
- 24. SQL強制執行1:1關係
- 25. cruisecontrol.net中的強制執行任務
- 26. 爲什麼RSpec不強制執行?
- 27. 強制執行函數命名約定
- 28. Spark Scheduler強制執行應用程序
- 29. 代碼促銷:強制執行規則
- 30. 您可以強制執行MPMoviePlayerPlaybackDidFinishNotification嗎?
這是一個盲猜,但是如果string.IsNullOrEmpty是罪魁禍首,那麼使用2 where子句代替:.Where(o => o.Name!= null).Where(o => o.Name.Length> 0) 。 – mayu 2012-03-01 08:58:06