首先,我是MongoDb的新手。在MongoDb C#驱动程序1.9.x中,我可以使用AsQueryable方法将集合视为可查询的。
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("test");
var col = db.GetCollection<Contact>("Contact"); //GetCollection without <T> is missing to.
var qrlist = col.AsQueryable(); // AsQueryable missing here.
如何让我的实体在新驱动程序中可查询,需要MongoDb专家的帮助。谢谢。
答案 0 :(得分: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
类型:史诗 状态:开启 优先级:主要 - P3 解决方案:尚未解决
从小时的嘴里说:Craig Wilson on the google forum
是的,新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
答案 1 :(得分:5)
我最初使用mongocsharp版本1.9x:
public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return _collection.AsQueryable<T>()
.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();
}
希望它有所帮助。
答案 2 :(得分:0)
虽然其他答案表明驱动程序的早期版本2不包括AsQueryable
,但现在可以在最新版本的驱动程序中使用(我尚未确切检查引入的版本)。
该方法可在MongoDB.Driver.IMongoCollectionExtensions
中找到,并且可以按您期望的方式调用。那就是:
IMongoCollection<TDocument> collection = ...;
IMongoQueryable<TDocument> queryable = collection.AsQueryable();