IEnumerable<T> and IQueryable<T> clarification?
读完这个问题后,我需要清理一些东西。
1 2 3 4 5 6 7 | IQueryable<Customer> custs = from c in db.Customers where c.City =="<City>" select c; IEnumerable<Customer> custs = from c in db.Customers where c.City =="<City>" select c; |
问题:
1)可以这样说吗:在第一个查询中,sqlserver正在运行整个操作,包括WHERE子句,并且只返回相关的行—而第二个查询执行
2)如果我只是在记忆中有一个收藏呢?(
1 2 3 | IQueryable<MyPerson> lst = from c in lstMyPerson where c.City =="<City>" select c; |
VS
1 2 3 | IEnumerable<MyPerson> custs = from c in lstMyPerson where c.City =="<City>" select c; |
现在执行有什么区别?
1:不,不正确
由于您只将结果存储到
你会从中得到不同的行为:
1 2 3 | IEnumerable<Customer> custs = from c in (IEnumerable<Customer>)db.Customers where c. City =="<City>" select c; |
在这种情况下,您将强制使用
注意:
1 2 3 | IEnumerable<Customer> x = from c in db.Customers where c.City =="<City>" select c; |
与此不同:
1 2 3 | IEnumerable<Customer> x = from c in db.Customers select c; IEnumerable<Customer> y = x.Where(c => c.City =="<City>"); |
在第一种情况下,
还要注意,只有您编写的语句实际上不会在服务器上执行任何东西,因为它们实际上只存储一个懒惰的集合。如果继续枚举这些集合,那么此时相关的位将在服务器上执行。
2:
在这种情况下,第一个不会编译。