【发布时间】:2021-12-27 12:29:27
【问题描述】:
大家好!
我为自动化测试编写了一个查询,但执行时间太长,而且我不确定如何有效优化它,因为我是 Linq where 子句的新手。
有人可以帮我解决这个问题吗?
var order = OrderRepositoryX.GetOrderByStatus(OrderStatusType.Dispatched, 4000)
.Where(x => x.siteId == 1 || x.siteId == 10 || x.siteId == 8 || x.siteId == 16 || x.siteId == 26 || x.siteId == 27)
.Where(x =>
{
var totalPrice = OrderRepository.GetOrderById(shared_parameters.testConfiguration, x.orderId).TotalPrice;
if (totalPrice < 500)
return false;
return true;
})
.Where(x =>
{
var cnt = ReturnOrderRepositoryX.CheckReturnOrderExists(x.orderId);
if (cnt > 0)
return false;
return true;
})
.Where(x =>
{
var cnt = OrderRepositoryX.CheckActiveOrderJobDetailsByOrderId(x.orderId);
if (cnt > 0)
return false;
return true;
})
.FirstOrDefault();
【问题讨论】:
-
尝试在调试模式下将每个
where作为自己的语句执行,以找出哪个子句正在减慢您的应用程序 -
是 EF 还是只是 LINQ to Entities?
-
您在 where 子句中执行了其他存储库代码...这意味着您的 linq 查询未转换为 SQL。它可能会提取内存中的所有数据,然后对其应用条件。这就是您性能缓慢的原因之一。
-
@SvyatoslavDanyliv - 它是英孚
-
@draz - 好的 - 我会检查调试这个