首先,我是MongoDb的新手.在MongoDb C#驱动程序1.9.x中,我可以使用AsQueryable方法将集合视为可查询的.
var db = client.GetServer().GetDatabase("test");
var col = db.GetCollection("Video");
var qrlist = col.AsQueryable();
Run Code Online (Sandbox Code Playgroud)
我安装了新的驱动程序2.0rc并在使用它时,我无法使用AsQueryable方法,因为它丢失了.是离开还是有另一种方法来实现这一目标?(我已经包含了MongoDB.Driver.Linq).
var db = client.GetDatabase("test");
var col = db.GetCollection<Contact>("Contact"); //GetCollection without <T> is missing to.
var qrlist = col.AsQueryable(); // AsQueryable missing here.
Run Code Online (Sandbox Code Playgroud)
如何让我的实体在新驱动程序中可查询,需要MongoDb大师的帮助.谢谢.
xan*_*tos 23
10月19日更新:
MongoDB 2.1驱动程序出来了https://github.com/mongodb/mongo-csharp-driver/releases/tag/v2.1.0
它支持LINQ:
LINQ
CSHARP-935 LINQ支持已被重写,现在以聚合框架为目标.它是一种更自然的翻译,可以实现以前无法翻译的LINQ的许多功能.
只需使用新的AsQueryable方法即可使用LINQ.
9月18日更新:
MongoDB 2.1驱动程序RC应该支持它.请参阅https://jira.mongodb.org/browse/CSHARP-935
最后2.1 rc问世了.做得好!
老答案:
不,AsQueryable不受支持:https://jira.mongodb.org/browse/CSHARP-935
类型:史诗状态:OPEN优先级:重大 - P3分辨率:未解决
从小时的口中:Craig Wilson在谷歌论坛上
是的,新api上目前没有AsQueryable.您可以在此处跟踪此功能(https://jira.mongodb.org/browse/CSHARP-935).我们根本没有足够的时间来完成并彻底测试.它安排在2.1,是我们的优先事项.在此之前,我们已将表达式树功能集成到Find和Aggregate方法(以及一些用于过滤的写入方法)中,这样您可能不需要完整的LINQ实现.例如,请参阅示例测试类作为示例:https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver.Tests/Samples/AggregationSample.cs#L77
我最初使用mongocsharp版本1.9x进行以下操作:
public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return _collection.AsQueryable<T>()
.Where(predicate.Compile()).AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)
能够在版本2中使用以下方法获得相同的结果:
public async Task<List<T>> SearchFor(Expression<Func<T, bool>> predicate)
{
return await _collection.Find(Builders<T>.Filter.Where(predicate)).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.