В моих UserRepository
У меня есть GetActive
метод:Отложенная казни в хранилище шаблона
public IEnumerable<User> GetActive()
{
var users = context.Set<UserTbl>().Where(x => x.IsActive);
foreach(var user in users)
{
yield return entityMapper.CreateFrom(user);
}
}
entityMapper
используются для отображения от EF-порожденной UserTbl
к доменным User
сущности.
Существует тысячи пользователей, поэтому я хочу, чтобы метод GetActive
отложил выполнение, возвращая IEnumerable<User>
, так что весь список не извлекается без необходимости. Я сделал это выше с foreach
и yield
.
При тестировании, кажется, что все данные извлекаются независимо. Следующие два вызова принимают одно и то же время:
// Get only 5 users in memory
var someUsers = UserRepository.GetActive().Take(5).ToList();
// Get all 100,000 users into memory
var allUsers = UserRepository.GetActive().ToList();
Что я делаю неправильно?
Самый простой способ - включить разбиение на страницы как аргументы метода репозитория «GetActive (int skip, int take)» – MikeSW