c# - 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))
{
// ...
}
}
}
解决方案
您可以使用 Fiddler 检查请求的次数。
但是,看起来会有 N 个基于用户的请求。有两种处理方式,
(i) 使用分页获取所有项目,并在客户端使用名称和年龄过滤用户。
(ii) 更改请求以从第一个请求本身的年龄和姓名中过滤用户。
推荐阅读
- laravel - 如果依赖字段无效,如何停止验证字段?- 拉拉维尔
- python - libvlc - 在视频之间保持窗口打开
- c# - Google Cloud Vision API - client.DetectText - 如何获取特定的图像位置数据?
- javascript - 使用 javascript 和 css 修改警报框
- javascript - 将音频从
- opengl-es-2.0 - 在 GLSurfaceView Android 上更改 Bitmp
- python - 如何使用非跟踪 CECMod 计算能量输出
- java - 为什么我的后端应用程序没有在 Springboot 中运行?
- design-patterns - 何时使用工厂方法
- laravel - Laravel 用反引号包装 int 参数