如何使用LINQ对MongoCollection <T> .AsQueryable()进行mongodb结果排序?

 勇淑丁 发布于 2023-01-30 11:52

我使用MongoDB来存储可以包含可变数量的用户定义索引值的实体.每个索引都可以包含一个或多个值,因此对于用户定义的索引,我使用对象列表的字典来存储值.

public class Entity
{
    public IDictionary> Indices { get; set; }
    // ...
}

我编写了一个存储库类,它支持通过传递自定义条件列表来查询实体,并且存储库构建了一个IMongoQuery使用MongoDB.Driver.Builders.Query该类的实例,并返回一个IQueryable

public IQueryable GetAll(IEnumerable criteria)
{
    IMongoQuery query = BuildQuery(criteria);

    //https://jira.mongodb.org/browse/CSHARP-461
    //return _db.GetCollection().Find(query).AsQueryable();

    return _db.GetCollection()
        .AsQueryable()
        .Where(x => query.Inject());
}

由于此处描述的问题https://jira.mongodb.org/browse/CSHARP-461我选择不使用MongoCursor.AsQueryable()因为MongoCursor实现了IEnumerable.结果是.返回时使用的任何表达式IQueryable都不在服务器上完成,它在客户端的内存中完成.相反,我MongoCollection.AsQueryable()按照建议将查询注入结果.

所以,上面的解决方案效果很好,但现在我想通过调用OrderBy()使用IMongoSortBy接口来做同样的事情来对结果进行排序,就像这样.

return _db.GetCollection()
    .AsQueryable()
    .Where(x => query.Inject())
    .OrderBy(x => sortBy.Inject());

但是,IMongoSortBy接口上没有实现Inject()

如果我使用MongoCursor,这将很容易

return _db.GetCollection()
    .Find(query).
    .SetSortOrder(sortBy)
    .AsQueryable();

那么,有没有办法可以使用调用对实体进行排序MongoCollection.AsQueryable()

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有