2016-04-22 5 views
0

Я знаю, как сделать разбиение на страницы, но это не соответствует моим требованиям, потому что базовый запрос разбиения на страницы обновляется каждый раз, когда мне нужен следующий постраничный результат. Поэтому я ищу простое решение для эффективного итерации по одному результату запроса. Пожалуйста, посмотрите ниже пример.Как выполнить итерацию большого запроса

var urls = db.Websites.Select(s => s.Website) 
      .Except(db.OldWebsites.Select(s => s.Website)); 

foreach (var url in urls) 
{ 
    //process items 
} 

Я просто хочу знать, что решение действительно эффективно, итерация целиком или нет. Я не совсем уверен, что решение загружает строки один за другим, не загружая все результаты в память.

Может ли кто-нибудь подтвердить это или предложить лучшее решение?

ответ

0

Да Entity Framework потоковые результаты вместо буферизации по умолчанию. Вызов метода AsStreaming ниже дает предупреждение, как:. «Запросы теперь потоковым по умолчанию, если только повторная попытка ExecutionStrategy не используются

foreach (var item in db.Websites.AsStreaming()) { } 

Просто нужно быть осторожными, что DbContext не имеет ссылки на повторные результаты Анонимных типов или примитивные. результаты уже не отслеживаются, поэтому необходимо вызвать результаты AsNoTracking для Entity, такие как

db.Websites.AsNoTracking() 
Смежные вопросы