IQueryable (до его перечисления) не является результатом, а логикой, используемой для возврата этих результатов.
Чтобы использовать пример LINQ2SQL ... представьте, что вы возвращаете IQueryable of Customers. Под капотом, который не будет список клиентов (пока вы ToList() это), но будет actualy быть SQL-запрос следующим образом:
SELECT * FROM [Clients]
Теперь это удобно, потому что мы не попали в базу данных еще! Так что давайте говорить, когда это IQueriable возвращается, мы хотим уточнить его до клиентов под названием «Боб» мы можем сделать:
var clients = GetClients().Where(c => c.Name == "Bob");
Теперь IQueriable выглядит так под капотом:
SELECT * FROM [Clients] WHERE Name = 'Bob'.
Теперь, когда Я делаю clients.ToList(), этот запрос будет запущен, база данных будет удалена, и у меня есть список клиентов, называемых bob, без необходимости выбирать всех клиентов, а затем травить их в памяти или выполнять два отдельных обращения к базе данных.
Для примера этого вы кусаете в попытке позади и получаете дочерние элементы, когда ваш datacontext выпал из области действия (например: запустите свой выбор внутри оператора using). Здесь параметры загрузки пригождаются в LINQ2SQL.
Надеюсь, что помогает
отличный вопрос. вы спасли мне часы исследований. – KyleM