2011-11-17 107 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子句时,它将只加载由数据库过滤的结果。

相关问题