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