3

署名付きのリポジトリがあります:

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()

コレクション内のすべてのドキュメントを取得するより良い方法はありますか?

4

2 に答える 2

4

ここで 2 つの質問があります。

  1. どのようにキャスト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();
}
  1. コレクション内のすべてのドキュメントを取得するより良い方法はありますか?

今じゃない。今はだめなの。空のフィルター ドキュメント ( new BsonDocument()) を渡すこともできますが、それ以上のことはないと思います。ドライバーの次のバージョン (v2.1) では、空のフィルターが追加されているため、これを行うことができます。

await database.GetCollection<Foo>("Foo").Find(Builders<Foo>.Filter.Empty)
于 2015-05-26T12:03:49.997 に答える
1

ここでは、コレクション内のすべてのドキュメントを返すには、空のフィルターで FindAsync を呼び出す必要があることが示されています。

コレクション内のすべてのドキュメントを返すには、空のフィルター ドキュメントを指定して FindAsync メソッドを呼び出します。

于 2015-05-26T09:21:41.400 に答える