2011-11-17 108 views
3

假設我有一個名爲User的表。 當我使用實體框架來獲取記錄我這樣做:實體框架 - Where子句

var db = new Context(); 
var users = db.Users; 

它返回所有的用戶在我的表。好。如果我這樣做:

var fooUsers = db.Users.Where(u => u.Name == 'foo'); 

它會給我所有用戶的名字'foo'。好。我的問題是: 實體框架作出這樣的查詢:

select * from user where name = 'foo' 

或者它加載所有的用戶,並將其篩選與lambda表達式在服務器上?

回答

11

提交給你的數據庫的Sql將包含你的where子句。您可以使用SQL Server Profiler在查詢提交給數據庫時進行觀察。

+3

+1正確的答案。謝謝Gasik。我希望聽到這個消息。 –

2

實體框架將把這樣的查詢翻譯成「存儲表達式」。也就是說,它會生成一個數據庫查詢 - 假設您的數據存儲數據庫 - 這與您在問題中包含的查詢有些類似。不過,它可能會列出專欄名稱,並且可能還有其他一些差異。

+1

+1正確答案。謝謝安德魯。 –

2

從這裏http://msdn.microsoft.com/en-us/library/cc853327.aspx

當您創建的ObjectQuery或LINQ查詢時,查詢可能不會立即執行。查詢執行被推遲到需要結果爲止,例如在foreach(C#)或For Each(Visual Basic)枚舉期間或當它被分配以填充List集合時。當您調用ObjectQuery上的Execute方法時,或者當您調用返回單例查詢的LINQ方法(如First或Any)時,查詢執行立即開始。有關更多信息,請參閱對象查詢和查詢執行(LINQ to Entities)。

所以,當你的查詢有一個WHERE子句時,它將只加載由數據庫過濾的結果。

相關問題