C# IQueryable/IEnumerable应用用途:针对Azure CosmosDB数据库的数据库查询请求

C# IQueryable/IEnumerable应用用途:针对Azure CosmosDB数据库的数据库查询请求,c#,.net,azure-cosmosdb,azure-cosmosdb-sqlapi,C#,.net,Azure Cosmosdb,Azure Cosmosdb Sqlapi,下面的代码是对cosomosdb的查询,我想知道将向数据库发送多少次请求 这段代码在减少数据库查询方面有什么改进吗 public async Task<List<Employee>> GetEmployee(string userName) { IEnumerable<User> users = GetByUser(userName); return GetEmployee(users); } private IEnumerable<

下面的代码是对
cosomosdb
的查询,我想知道将向数据库发送多少次请求

这段代码在减少数据库查询方面有什么改进吗

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))
        {
            // ...
        }
    }
}
公共异步任务GetEmployee(字符串用户名) { IEnumerable users=GetByUser(用户名); 返回GetEmployee(用户); } 私有IEnumerable GetByUser(字符串用户名) { var capturesulthistorylink=UriFactory.CreateDocumentCollectionUri(数据库、容器); var user=\u documentClient.CreateDocumentQuery(CaptureResultThistoryLink) 。其中(r=>r.UserName==用户名); 返回用户; } 私有异步任务GetEmployee(IEnumerable用户) { var selectedUsers=users.Where(o=>o.Age>18); foreach(用户中的var用户) { if(selectedUsers.Contains(user.Id)) { // ... } } }
您可以使用Fiddler检查请求的次数

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

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


(ii)更改请求,从第一个请求本身的年龄和姓名中筛选用户。

我认为不会有N个请求。