首页 > 解决方案 > IQueryable/IEnumerable 应用用法:使用 Azure CosmosDB 针对数据库的数据库查询请求

问题描述

下面的代码是一个查询Cosomos DB,我想知道多少次请求将被发送到数据库?

在减少数据库查询方面对此代码有任何改进吗?

public async Task<List<Employee>> GetEmployee(string userName)
{
    IEnumerable<User> users = GetByUser(userName);

    return GetEmployee(users);
}

private IEnumerable<User> GetByUser(string userName)
{
    var captureResultHistoryLink = UriFactory.CreateDocumentCollectionUri(Database, Container);

    var user = _documentClient.CreateDocumentQuery<User>(captureResultHistoryLink)
        .Where(r => r.UserName == userName);

    return user;
}


private async Task<List<Employee>> GetEmployee(IEnumerable<User> users)
{
    var selectedUsers = users.Where(o => o.Age > 18);

    foreach (var user in users)
    {
        if (selectedUsers.Contains(user.Id))
        {
            // ...
        }
    }
}

标签: c#.netazure-cosmosdbazure-cosmosdb-sqlapi

解决方案


您可以使用 Fiddler 检查请求的次数。

但是,看起来会有 N 个基于用户的请求。有两种处理方式,

(i) 使用分页获取所有项目,并在客户端使用名称和年龄过滤用户。

(ii) 更改请求以从第一个请求本身的年龄和姓名中过滤用户。


推荐阅读