无法转换'MongoDB.Driver.IMongoCollection<>'到'System.Collections.Generic.IEnumerable<>'

时间:2015-05-11 02:09:34

标签: c# mongodb

我将Mongodb驱动程序升级到最新的2.0并且我的应用程序以前的工作失败,错误如下:

  

无法转换为'MongoDB.Driver.IMongoCollection<>'至   'System.Collections.Generic.IEnumerable<>'

源代码如下:

public IQueryable<Registration> Registrations
{
    get 
    { 
        return db
            .GetCollection<Registration>("Registrations")
            .AsQueryable<Registration>(); 
    }
}

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

在新的MongoDB驱动程序中,整个过程基于异步方法,因此查询数据的旧方法不再适用。

基本上,您可能希望使用find方法创建MongoRepository类,并且该存储库可以具有以下Find方法:

public class MongoRepository<T>
{

    protected IMongoCollection<T> _collection;

    public MongoRepository(string collectionName) 
    {
        // Get your mongo client and database objects here.
        _collection = _mongoDb.GetCollection<T>(collectionName);
    }

    public async Task<IList<T>> Find(Expression<Func<T, bool>> query)
    {
        // Return the enumerable of the collection
        return await _collection.Find<T>(query).ToListAsync();
    }

}

然后可以这样实现:

MongoRepository<Registration> repo = new MongoRepository("Registrations");
IList<Registration> registrations = repo.Find(i => i.SomeProperty == true);

有关如何在此处实施API更改的一些很好的信息:http://mongodb.github.io/mongo-csharp-driver/2.0/upgrading/

答案 1 :(得分:0)

您可以使用collection.Find(builder.Where(x => true)).ToListAsync();

答案 2 :(得分:0)

不知道它是否适用于2.0,但在2.3中您需要做的就是插入using MongoDB.Driver

此命名空间包含IMongoCollectionExtensions,为AsQueryable<T>提供IMongoCollection<T>功能。

请参阅MongoDB Driver's GitHub page