我有一个带签名的存储库:
public Task<IList<IFoo>> GetList()
{
}
如何将mongoDb集合投射到此接口?(MongoDb驱动程序2.0)
public Task<IList<IFoo>> GetList()
{
Task<List<Foo>> foo = this.database.GetCollection<Foo>("Foo").Find(e => true).ToListAsync();
return foo ; // ?? somehow cast Task<List<Foo>> to Task<IList<IFoo>>
}
还有,这段代码困扰我
collection.Find(e => true).ToListAsync()
有没有更好的方法来收集所有文档?
这里有两个问题。
Task<List<Foo>>
来Task<IList<IFoo>>
?您不能,因为Task
.Net中不是协变的。你可以解开,其结果await
,但你可以不投仍然是行不通的List<Foo>
进入IList<IFoo>
。
您可以做的是新建List<IFoo>
一个项目,然后将它们移到所有项目上:
public async Task<IList<IFoo>> GetList()
{
List<Foo> results = await database.GetCollection<Foo>("Foo").Find(_ => true).ToListAsync();
return results.Cast<IFoo>().ToList();
}
不是现在。您可以传入一个空的过滤器文档(new BsonDocument()
),但我认为这没有什么比这更好的了。在驱动程序的下一版本(v2.1)中,他们添加了一个空的过滤器,因此您可以执行以下操作:
await database.GetCollection<Foo>("Foo").Find(Builders<Foo>.Filter.Empty)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句