Я думаю, что вам не хватает важной концепции манипулирования данными в .NET
Отсроченная и немедленная загрузка
Важно подчеркнуть, что по умолчанию LINQ to SQL извлекает данные из
базы данных, только когда вы запрашиваете ее, а не когда вы определяете запрос LINQ to SQL или создаете
Коллекция столов. Это называется отложенной загрузкой.
Когда цикл foreach запускается, LINQ to SQL создает и запускает оператор SQL SELECT, полученный
из запроса LINQ to SQL для создания объекта ADO.NET DataReader. Каждая итерация
Цикл foreach выполняет необходимые методы GetXXX для извлечения данных для этой строки. После
последняя строка была извлечена и обработана циклом foreach, LINQ to SQL закрывает
подключение к базе данных.
Отсроченная выборка гарантирует, что только те данные, которые фактически использует приложение, извлекаются из
база данных. Однако, если вы обращаетесь к базе данных, работающей на удаленном экземпляре SQL
Сервер, выбирающий данные строка за строкой, не наилучшим образом использует пропускную способность сети. В этом
В этом случае вы можете извлечь и кэшировать все данные в одном сетевом запросе, принудительно
оценка запроса LINQ to SQL. Вы можете сделать это, вызвав ToList или ToArray
методы расширения, которые извлекают данные в список или массив при определении LINQ to SQL
запрос, как это:
var productsQuery = from p in products.ToList()
select p;