Linq 在新的Mongodb C#驱动程序2.0rc中是否有可查询的方法?
首先,我是MongoDb的新手。在MongoDb C#driver 1.9.x中,我可以使用如下AsQueryable方法将集合作为可查询的Linq 在新的Mongodb C#驱动程序2.0rc中是否有可查询的方法?,linq,mongodb,Linq,Mongodb,首先,我是MongoDb的新手。在MongoDb C#driver 1.9.x中,我可以使用如下AsQueryable方法将集合作为可查询的 var db = client.GetServer().GetDatabase("test"); var col = db.GetCollection("Video"); var qrlist = col.AsQueryable(); 我安装了新的驱动程序2.0rc,在使用它时,我无法使用AsQueryab
var db = client.GetServer().GetDatabase("test");
var col = db.GetCollection("Video");
var qrlist = col.AsQueryable();
我安装了新的驱动程序2.0rc,在使用它时,我无法使用AsQueryable方法,因为它丢失了。它是否已经离开,或者是否有其他方法来实现这一点?(我已经包括MongoDB.Driver.Linq)
var db=client.GetDatabase(“测试”);
var col=db.GetCollection(“联系人”)//没有的GetCollection缺少到。
var qrlist=col.AsQueryable();//这里不见了。
如何在新的驱动程序中获得可查询的实体,需要MongoDb专家的帮助。谢谢。10月19日更新: MongoDB 2.1驱动程序已退出 它支持LINQ: 林克 CSHARP-935 LINQ支持已被重写,现在以聚合框架为目标。这是一种更自然的翻译,可以实现以前无法翻译的LINQ的许多功能 只需使用新的AsQueryable方法来处理LINQ 9月18日更新: MongoDB 2.1驱动程序RC应该支持它。看 最终,2.1 rc出现了。干得好 旧答案: 否,不支持AsQueryable: 类型:史诗 状态:打开 优先:专业-P3 决议:未解决 从霍斯的嘴里: 是的,新api上目前没有可查询的内容。您可以在此处跟踪此功能()。我们只是没有足够的时间来完成和彻底测试。它被安排在2.1版,是我们的优先事项。在此之前,我们已经将表达式树功能集成到Find和Aggregate方法(以及一些用于过滤的write方法)中,因此您可能不需要完整的LINQ实现。例如,请参见此处的示例测试类:
我最初使用mongocsharp版本1.9x时有以下功能:
public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return _collection.AsQueryable<T>()
.Where(predicate.Compile()).AsQueryable();
}
publicIQueryable搜索(表达式谓词)
{
return _collection.AsQueryable()
.Where(predicate.Compile()).AsQueryable();
}
在第2版中,可以通过以下方式获得相同的结果:
public async Task<List<T>> SearchFor(Expression<Func<T, bool>> predicate)
{
return await _collection.Find(Builders<T>.Filter.Where(predicate)).ToListAsync();
}
公共异步任务搜索(表达式谓词)
{
return wait_collection.Find(Builders.Filter.Where(谓词)).ToListAsync();
}
希望能有所帮助。而其他答案表明早期版本2的驱动程序没有包含
AsQueryable
,这现在在最新版本的驱动程序中可用(我还没有检查到底是哪个版本引入了它)
该方法可以在MongoDB.Driver.IMongoCollectionExtensions
中找到,并且可以按预期调用。即:
IMongoCollection<TDocument> collection = ...;
IMongoQueryable<TDocument> queryable = collection.AsQueryable();
IMongoCollection=。。。;
IMongoQueryable queryable=collection.AsQueryable();
听到这个消息我很难过。谢谢你的回答,Xanatos。@user156523我认为使用更新的驱动程序需要进行很多重构。这个问题昨天在mongo jira上更新了,所以我们很快就会再次看到对linq的支持。好消息。谢谢..AsQueryable现在似乎在MongoDB.Driver 2.4.3中可用。我能够为“MongoDB.Driver.Linq”添加一个using,然后我能够使用以下语法使用iQueryable访问我的集合:\u collection.AsQueryable().Where(谓词)代码>哦-我注意到上面已经解释过了,我只是看错了评论。谢谢你的回答。不幸的是,以列表形式获取数据对我来说是一个很大的性能问题。ToListSync很昂贵。您违反了IQueryable的目的,因为您强制对集合中匹配的所有文档进行急切检索。调用者不能进一步筛选,除非他们在内存中这样做。现在MongoDB.Driver支持IQueryable,因此您可以返回IQueryable并使用\u collection.AsQueryable().Where(谓词)
。另外,在第一个示例中,linq语句中有两次“AsQueryable()”。.Where已作为IQueryable返回,因此第一个示例中的最后一个AsQueryable()是多余的,不必要的。
IMongoCollection<TDocument> collection = ...;
IMongoQueryable<TDocument> queryable = collection.AsQueryable();