我将Mongodb驱动程序升级到最新的2.0并且我的应用程序以前的工作失败,错误如下:
无法转换为'MongoDB.Driver.IMongoCollection<>'至 'System.Collections.Generic.IEnumerable<>'
源代码如下:
public IQueryable<Registration> Registrations
{
get
{
return db
.GetCollection<Registration>("Registrations")
.AsQueryable<Registration>();
}
}
知道如何解决这个问题吗?
答案 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>
功能。