【发布时间】:2015-10-27 09:09:55
【问题描述】:
我有一张包含客户列表的表格。 一位客户有 0 个、1 个或多个合同。
我必须检索所有启用的客户,将它们设置在 DTO 中并将当前合同添加到此 DTO(如果有的话)
目前很慢(超过10分钟)。
代码
List<CustomerOverviewDto> result = new List<CustomerOverviewDto>();
customers= context.Customers.Where(c => c.IsEnabled).ToList();
foreach (Customer customer in customers)
{
CustomerOverviewDto customerDto = GetCustomer(customer);
Framework.Contract contract =
customer.Contracts.Where(c => c.ContractEndDate >= DateTime.Today && c.ContractStartDate <= DateTime.Today)
.FirstOrDefault();
if (contract != null)
{
SetContract(customerDto, contract);
}
result.add(customerDto);
}
【问题讨论】:
-
显示生成的 SQL 查询
-
客户表包含 36 列(Varchar 和 Int),共有 14478 行。你真的需要列名吗?
-
我想看看 ORM 是如何生成查询的,也许它以非常低效的方式进行。顺便确保您的查询没有被其他事务阻止
-
你有关于 IsEnabled、ContractEndDate 和 ContractStartDate 的索引吗?另外,SetContract 是做什么的?这些信息对于理解查询效率低下的原因非常重要
-
@lad2025 我怎样才能看到这个生成的查询?在视觉工作室?
标签: c# sql performance linq