AsQueryable方法是否在新的Mongodb C#驱动程序2.0rc中消失了?

ilk*_*nal 21 linq mongodb

首先,我是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

  • @ user1562523我认为使用更新的驱动程序需要进行大量的重构. (2认同)

nik*_*l65 5

我最初使用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)

希望能帮助到你.