1
我是新來的EF,所以現在有點溫柔我正在使用4.2我只是想知道什麼是我可以限制EF只加載過濾數據的最佳方式,而不是從數據庫中提取所有數據,然後在其上應用過濾器。EF DbContext.Set <T>已過濾的記錄只
我可以看到DbContext.Set()或DbContext.Set()。AsQueryable();不確定「Where」函數,但它似乎是按照相同的原理工作的,即已經加載了任何給定表的所有數據,然後對它們應用濾波器,這不會成爲主要的性能影響嗎?或者我在這裏錯過了什麼?我不希望EF從表中獲取所有數據,但只是過濾了一個。如何去做呢?
感謝
Linq查詢被轉換爲SQL,因此如果您在查詢中使用.Where(),它應該在db網站上執行,而不是在您的應用程序中執行。請注意,如果您執行類似.ToList()/。ToArray()的操作,然後嘗試在其上應用.Where(),則會在客戶端網站上進行過濾,因爲.ToList()將在應用過濾。 – Pawel 2012-02-20 17:39:56
@Pawel IQueryable query = _context.Set (); (filter!= null) if(filter!= null) { query = query.Where(filter); }; //你可以看到它已經加載了所有的數據。所以如果我_context.Set ().Where(filter);那麼這應該足夠了? –
afr0
2012-02-21 06:56:12
@Pawel感謝您的澄清我只是確認它的SQL分析器它確實附加了你說的方式。無法標記答案。 歡呼 – afr0 2012-02-21 08:12:17