oData's skip() и top() извлекают весь набор записей перед фильтрацией
У меня есть функция веб-API с поддержкой oData
[EnableQuery()]
public IQueryable<StoreCommand> Get()
{
return _storeCommandService.GetAllStoreCommands().AsQueryable();
}
уровень обслуживания, вызывающий реализацию шаблона репозитория на основе Mongodb.
public IEnumerable<StoreCommand> GetAllStoreCommands()
{
return _uow.StoreCommands.GetAll();
}
где GetAll реализован на уровне репозитория, как
public IList<TEntity> GetAll()
{
return _collection.FindAllAs<TEntity>().ToList();
}
где _collection - это MongoCollection драйвера C#.
когда я звоню как
http://localhost:xxxx/api/storeCommandsrest?$skip=0&$top=10&$orderby=Name
я получаю 10 лучших записей, но он извлекает все записи из БД и отправляет меня обратно в 10 лучших. Пожалуйста, объясните, как мы можем извлечь из БД только необходимый набор.
1 ответ
Решение
Комментарий перенесен в ответ:
Вы не возвращаете IQueryable из GetAllStoreCommands(). Ваш возвращаемый тип должен быть IQueryable(). Чтобы получить это от драйвера, это должно быть _collection.AsQueryable().