我使用MongoDB来存储可以包含可变数量的用户定义索引值的实体.每个索引都可以包含一个或多个值,因此对于用户定义的索引,我使用对象列表的字典来存储值.
public class Entity { public IDictionary> Indices { get; set; } // ... }
我编写了一个存储库类,它支持通过传递自定义条件列表来查询实体,并且存储库构建了一个IMongoQuery
使用MongoDB.Driver.Builders.Query
该类的实例,并返回一个IQueryable
public IQueryableGetAll(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
按照建议将查询注入结果.
所以,上面的解决方案效果很好,但现在我想通过调用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
?