Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
662 views
in Technique[技术] by (71.8m points)

azure cosmosdb - Create a method in a Cosmos service that runs a LINQ lambda passed as parameter

I'm creating a Cosmos service, it has basic CRUD but I need to implement a method that receiving an expression with LINQ executes it against the DB. I have this:

    public IOrderedQueryable<T> GetLinqQueryable<T>(string partitionKeyFilter = null)
    {
        var container = GetContainer<Game>();
        QueryRequestOptions queryRequestOptions = null;

        if (partitionKeyFilter != null)
        {
            queryRequestOptions = new QueryRequestOptions()
            {
                PartitionKey = new PartitionKey(partitionKeyFilter),
            };
        }

        return container.GetItemLinqQueryable<T>(requestOptions: queryRequestOptions);
    }

    public async Task<IList<T>> GetQueryResultsAsync<T>(IQueryable<T> query)
    {
        var result = new List<T>();

        using var iterator = query.ToFeedIterator();
        while (iterator.HasMoreResults)
        {
            var response = await iterator.ReadNextAsync();
            result.AddRange(response);
        }

        return result;
    }

But it implies that I have to call twice like this, or in two lines ??:

var results = await _cosmosService.GetQueryResultAsync(_cosmosService.GetLinqQueryable<T>().Where(x => x.Id == 1));

Can this be improved somehow?

question from:https://stackoverflow.com/questions/65837998/create-a-method-in-a-cosmos-service-that-runs-a-linq-lambda-passed-as-parameter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...