【发布时间】:2011-03-24 08:11:57
【问题描述】:
据我了解,当我在 IQueryable 上使用 LINQ 扩展方法(使用 lambda 表达式语法)时,实际上是 ObjectSet 实例,它们被转换为 LINQ to SQL 查询。我的意思是那个命令
IQueryable<User> users = db.UserSet;
var users32YearsOld = users.Where(user => user.Age == 32);
完全一样
IQueryable<User> users = db.UserSet;
var users32YearsOld = from user in users where user.Age == 32 select user;
所以在他们users32YearsOld被枚举为循环或类似之前,他们都不会访问数据库。 (希望我理解正确)。
但是,如果我不将 ObjectSet 屏蔽为 IQueryable 而是屏蔽为 IEnumerable 会发生什么?那么如果它的类型是IEnumerable 呢?
IEnumerable<User> users = db.UserSet;
var users32YearsOld = users.Where(user => user.Age == 32);
它会立即访问数据库吗(如果是,那么什么时候?就在第一行或第二行)?或者它是否会像之前的命令一样在users32YearsOld 被枚举之前不会命中数据库?如果我改用following会有什么不同吗?
IEnumerable<User> users = db.UserSet;
var users32YearsOld = from user in users where user.Age == 32 select user;
谢谢
【问题讨论】:
标签: c# .net entity-framework ienumerable iqueryable