c# - 如何在内存中查询列表而不是数据库调用
问题描述
我从数据库中获取列表companies
,每家公司可能是另一家公司的父母company
,我想知道哪些公司有孩子。没有别的,只是HasChildren
=true
或false
:
从数据库中获取公司:
public async Task<IEnumerable<CompDTO>> Get(SearchObject request)
{
IQueryable<Company> companies;
// .. some code where I'm fetching my companies
return Map(companies);
}
地图方法:
private IEnumerable<CompDTO> Map(IEnumerable<Company> companies)
{
return companies.Select(c => Map(c));
}
还有另一种从数据库数据创建 DTO 对象的 map 方法:
private CompDTO Map(Company company)
{
return new CompDTO()
{
Id = company.Id,
CompanyName = company.Title,
ParentCompanyId = company.ParentCompanyId,
HasChildren = // I need to check here if company.Id is parent to any another company
};
}
基本上我想检查我的对象是否有childrens
,以便我可以HasChildren
正确填充属性。:)
附言
我试过这样的事情:
private CompDTO Map(Company company)
{
return new CompDTO()
{
Id = company.Id,
CompanyName = company.Title,
ParentCompanyId = company.ParentCompanyId,
HasChildren = HasChildren(companyId).GetAwaiter().Result();
};
}
private async Task<bool> HasChildren(long id)
{
return await _context.Companies.AnyAsync(c => c.ParentCompanyId == id && c.ParentCompany.Active);
}
但是通过这种方法,我收到了一个错误,它说几个线程共享一个数据库连接 ,无论如何我想避免数据库调用来检查公司是否有孩子(真或假)。我想它可以在内存中做到这一点?因为在像 5000 这样的许多行上,将有 5000 个额外的数据库调用来检查真/假数据:)
多谢你们
解决方案
IQueryable<Company> companies = ctx.Companies;
var result = companies.AsEnumerable()
.Select(c => new {
c, HasChildren = companies.Any(cc => cc.parentCompanyId == c.Id)
});
编辑:
var companies = ctx.Companies.AsEnumerable();
var result = companies.Select(c => new CompDTO()
{
Id = c.Id,
CompanyName = c.Title,
ParentCompanyId = c.ParentCompanyId,
HasChildren = companies.Any(cc => cc.ParentCompanyId == c.Id)
});
推荐阅读
- html - 如何在不提交的情况下触发表单输入模式验证?
- javascript - Mongoose 验证错误:首先:需要路径 `first`。最后:需要路径`last`。”
- arrays - 为什么我的列表上方有轮播时无法滚动?
- rx-java - RxJava - 将 Observable 作为参数传递给方法
- android - Android 网页查看空白页
- microsoft-teams - 从 Teams 桌面客户端应用程序选项卡打开一个弹出窗口(例如本机浏览器)
- cucumber - 无法使用 SerenityParameterizedRunner 从 csv 文件中读取数据
- angular - 类 MarkdownModule 不是 Angular 模块
- php - PHPSpreadsheet:为时间格式化单元格还包括日期
- r - ggplot中颜色美学的多个变量问题