[英]How to cast mongo collection to interface C#
我有一個帶簽名的存儲庫:
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<IList<IFoo>>
? 您不能,因為Task
在.Net中不是協變的。 您可以使用await
來解開結果,但是由於無法將List<Foo>
IList<IFoo>
轉換為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)
在這里 ,它說你必須調用FindAsync一個空的過濾器返回所有文檔的集合:
要返回集合中的所有文檔,請使用空的過濾器文檔調用FindAsync方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.