Различия при использовании IEnumerable и IQueryable в качестве типа ObjectSet

Насколько я понимаю, когда я использую методы расширения LINQ (с синтаксисом лямбда-выражений) в IQueryable , то есть в фактическом экземпляре 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 не будут перечислены для цикла или чего-то подобного. (Надеюсь, я правильно это понимаю.)

Но что будет, если я не буду? t замаскировать этот ObjectSet как IQueryable , но как IEnumerable ? Итак, если это тип IEnumerable ?

IEnumerable<User> users = db.UserSet;
var users32YearsOld = users.Where(user => user.Age == 32);

Будет ли он немедленно попадать в базу данных (если да, то когда? Прямо в первой строке или во второй)? Или он будет вести себя как предыдущая команда, которая не попадет в базу данных, пока не будет перечислено users32YearsOld ? Будет ли разница, если я воспользуюсь подпиской?

IEnumerable<User> users = db.UserSet;
var users32YearsOld = from user in users where user.Age == 32 select user;

Спасибо

7
задан Rasto 24 March 2011 в 08:20
поделиться