Насколько я понимаю, когда я использую методы расширения 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;
Спасибо