2012-02-20 28 views
1

我是新來的EF,所以現在有點溫柔我正在使用4.2我只是想知道什麼是我可以限制EF只加載過濾數據的最佳方式,而不是從數據庫中提取所有數據,然後在其上應用過濾器。EF DbContext.Set <T>已過濾的記錄只

我可以看到DbContext.Set()或DbContext.Set()。AsQueryable();不確定「Where」函數,但它似乎是按照相同的原理工作的,即已經加載了任何給定表的所有數據,然後對它們應用濾波器,這不會成爲主要的性能影響嗎?或者我在這裏錯過了什麼?我不希望EF從表中獲取所有數據,但只是過濾了一個。如何去做呢?

感謝

+0

Linq查詢被轉換爲SQL,因此如果您在查詢中使用.Where(),它應該在db網站上執行,而不是在您的應用程序中執行。請注意,如果您執行類似.ToList()/。ToArray()的操作,然後嘗試在其上應用.Where(),則會在客戶端網站上進行過濾,因爲.ToList()將在應用過濾。 – Pawel 2012-02-20 17:39:56

+0

@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

+0

@Pawel感謝您的澄清我只是確認它的SQL分析器它確實附加了你說的方式。無法標記答案。 歡呼 – afr0 2012-02-21 08:12:17

回答

1

LINQ查詢將被轉換爲SQL,所以如果你在查詢中使用。凡()應該在DB的網站沒有在應用程序中執行。請注意,如果您執行類似.ToList()/。ToArray()的操作,然後嘗試在其上應用.Where(),則會在客戶端網站上進行過濾,因爲.ToList()將在應用過濾器