Останавливает ли .AsQueryable () IEnumerable от вытягивания всего в память? - PullRequest
2 голосов
/ 16 января 2011

Таким образом, IQueryable позволяет выполнять ваши запросы на уровне базы данных, а не в коллекции объектов в памяти, такой как IEnumerable. Если у меня есть IEnumerable и я вызываю метод расширения AsQueryable (), означает ли это, что теперь он является IQueryable и все вызовы будут выполняться в базе данных? Или IEnumerable уже загружен в память?

Я знаю, что IEnumerable отложил выполнение, значит ли это, что вызов AsQueryable перед итерацией коллекции приведет к выполнению всех его запросов в базе данных?

Извините, я новичок в этом, это все очень запутанно.

PS - я использую LINQ to Entities с EF 4.0.

1 Ответ

2 голосов
/ 16 января 2011

Если объект, который у вас есть (как IEnumerable<T>) , также реализует IQueryable<T>, тогда вам может повезти, но в общем случае: нет. За исключением, возможно, для этого углового случая, тогда уже слишком поздно, и вы больше не можете «составлять» запрос (то есть добавить условие «где», которое будет обрабатываться БД). Вместо этого LINQ-to-Objects делает все возможное, чтобы выглядеть запрашиваемым. Но эти данные будут потребляться линейно из базового перечислимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...