Выберите диапазон с Entity Framework - PullRequest
6 голосов
/ 04 мая 2011

У меня проблема с попыткой максимизировать производительность нашего списка, в котором есть страницы.

Я хочу, чтобы структура сущностей выполняла оператор выбора, но возвращала только диапазон результата (range = элементыодна страница списка).

Я искал в Google, но не нашел результатов по этому вопросу.Я только обнаружил, что могу сделать .ToList (). GetRange (начальный индекс, конечный индекс), но тогда все элементы будут загружены в память, и это то, чего я хотел бы избежать ...

Может кто-нибудь сказать мне, если это можно сделать?(Я не хочу использовать хранимую процедуру или представление или что-то подобное, потому что наше представление списка должно быть многократно используемым ...)

Спасибо!

Ответы [ 2 ]

15 голосов
/ 04 мая 2011

Вы должны иметь возможность использовать .Take(x).ToList()

редактировать: извините, попробуйте .Skip(startPosition).Take(numberOfItems).ToList()

1 голос
/ 30 сентября 2014

И если вы не используете отложенную загрузку, обязательно используйте Query () перед Load () при применении фильтров, чтобы избежать загрузки всей коллекции перед применением фильтров:

context.Entry(blog) 
    .Collection(b => b.Posts) 
    .Query() 
    .Skip(startPosition)
    .Take(numberOfItems)
    .Load()
    .ToList(); 

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

Для получения дополнительной информации: http://msdn.microsoft.com/en-us/data/jj574232.aspx

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