programing

AsQueryable 메서드를 MongoDb C# Driver 2.1과 비동기적으로 사용하려면 어떻게 해야 합니까?

padding 2023. 7. 2. 19:04
반응형

AsQueryable 메서드를 MongoDb C# Driver 2.1과 비동기적으로 사용하려면 어떻게 해야 합니까?

MongoDb C# 드라이버 버전 2.1은 최근에 이 방법을 다시 도입했습니다.AsQueryable비동기식으로 부를 수 있는 방법을 찾는 데 어려움을 겪고 있습니다.

Entity Framework를 사용하면 다음을 통해 달성할 수 있습니다.QueryableExtensions.ToListAsync하지만 MongoDb를 사용하면 동등한 것을 볼 수 없습니다.

따라서 다음과 같은 저장소 방법이 제공됩니다.

public IQueryable<MyType> GetFiltered(Expression<Func<MyType, bool>> predicate)
{
        return Database.GetCollection<MyType>(typeof(MyType).Name).AsQueryable().Where(predicate);
}

저는 이런 걸 하고 싶었어요.

var myTypes = await MyRepository.GetFiltered(t => t.Id == 1).ToListAsync();

이것이 가능합니까?

다음에서 잘못된 유형을 반환하는 중입니다.GetFiltered기능.반환해야 합니다.IMongoQueryable<MyType>대신에IQueryable<MyType>:

public IMongoQueryable<MyType> GetFiltered(Expression<Func<MyType, bool>> predicate)
{
    return Database.GetCollection<MyType>(typeof(MyType).Name).AsQueryable()
        .Where(predicate);
}

그러면 다음과 같이 성공적으로 호출할 수:

var myTypes = await MyRepository.GetFiltered(t => t.Id == 1).ToListAsync();

새로운 버전의 MongoDB 드라이버 업데이트를 위해 나중에 게시합니다.

최신 버전의 MongoDB에서는 비동기식으로 호출할 수 있습니다.MongoDB를 포함해야 합니다.드라이버.Linq:

using MongoDB.Driver.Linq;
var myTypes = await Database.GetCollection<MyType>().AsQueryable()
.Where(t => t.Id == 1).ToListAsync();

저는 승인된 답변에 찬성표를 던졌습니다.

추상화해야 하는 경우IMongoQueryable이 작은 내선 도우미가 유용할 수도 있는 호출자의 인터페이스.

public static class MongoQueryableMixIn
{
    public static Task<List<T>> ToMongoListAsync<T>(this IQueryable<T> mongoQueryOnly)
    {
        return ((IMongoQueryable<T>) mongoQueryOnly).ToListAsync();
    }
}

처음에는 전화를 해야 합니다.ToCursorAsync()위해서IMonqoQuarable<T>객체, 그리고 호출ToListAsync()대기 중인 IAsyncCursor 결과의 경우:

public IMongoQueryable<MyType> GetFiltered(Expression<Func<MyType, bool>> predicate)
{
    return Database.GetCollection<MyType>(typeof(MyType).Name).AsQueryable()
        .Where(predicate);
}

그리고 나서.

var myTypes = await(await MyRepository.GetFiltered(t => t.Id == 1).ToCursorAsync()).ToListAsync();

애즈 조니승인된 답변에 언급된 HK, 반품 유형이 잘못되었으며 다음과 같아야 합니다.IMongoQueryable<T>하지만, 이것이 필요한 전부는 것은 아닙니다.

을 하기 위해서.에서 비동기()를 나열하려면IMongoQueryable<T>개체, 네임스페이스도 포함해야 합니다.using MongoDB.Driver.Linq이제 이것은 당신이 생각하는 것이 아닙니다.IMongoQueryable<T>인터페이스 공급자가 호출하려는 위치와 동일한 파일에 있습니다.ToListAsync(), 하지만 제 경우에는 기본 클래스가IMongoQueryable<T>인터페이스, 그리고 나는 그것을 내 파생된 클래스에서 사용하고 싶습니다.

나는 추가해야 했습니다.using MongoDB.Driver.Linq해당 확장 메서드에 액세스할 수 있습니다.

언급URL : https://stackoverflow.com/questions/34042367/how-do-i-use-the-asqueryable-method-asynchronously-with-mongodb-c-sharp-driver-2

반응형