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().

Другие вопросы по тегам