oData的skip()和top()在过滤之前拉取整个记录集

时间:2015-05-21 13:29:52

标签: mongodb asp.net-web-api odata mongodb-.net-driver asp.net-web-api-odata

我有一个支持oData的web api功能

[EnableQuery()]
    public IQueryable<StoreCommand> Get()
    {
        return _storeCommandService.GetAllStoreCommands().AsQueryable();
    }

服务层调用基于Mongodb的Repository模式的实现。

public IEnumerable<StoreCommand> GetAllStoreCommands()
    {
        return _uow.StoreCommands.GetAll();
    }

其中GetAll在Repository层实现,如

    public IList<TEntity> GetAll()
    {
        return _collection.FindAllAs<TEntity>().ToList();
    }

其中_collection是c#驱动程序的MongoCollection。

当我打电话时

http://localhost:xxxx/api/storeCommandsrest?$skip=0&$top=10&$orderby=Name

我获得了前十名的记录,但它从数据库中提取了所有记录并将我送回前10名。 请指导我们如何从数据库中仅提取所需的集合。

1 个答案:

答案 0 :(得分:0)

评论转而回答:

您没有从GetAllStoreCommands()返回IQueryable。您的返回类型必须是IQueryable()。要从驱动程序中获取它,它应该是_collection.AsQueryable()。