Почему выполняется первый запрос?
первый запрос выполняется за 15 секунд
но второй запрос после долгого времени не выполняется
_orderItems
.Include(x => x.Order)
.Include(x => x.ProductInfo)
.Include(x => x.SheedProduct)
.Where(p =>
p.Order.IsDone &&
(p.SheedProductId == searchModel.SheedProductId || searchModel.SheedProductId == 0) &&
(p.Order.CreationTime.Year >= searchModel.YearFrom || searchModel.YearFrom == 0) &&
(p.Order.CreationTime.Year <= searchModel.YearTo || searchModel.YearTo == 0) &&
(p.Order.CreationTime >= searchModel.DateFrom || searchModel.DateFrom == null) &&
(p.Order.CreationTime <= searchModel.DateTo || searchModel.DateTo == null))
.Select(x => new
{
x.Order.CreationTime,
x.ProductInfo.IsBulk,
x.SheedProductId,
x.Order.TotalPrice,
x.SheedProduct.Title
})
.ToList();
OrderItems всего строки 50000
Заказать 50000
общее время 15 с
запрос 2
(from order in _orders
join orderItem in _orderItems
on order.SheedOrderId equals orderItem.OrderId
where order.IsDone &&
(order.CreationTime.Year >= searchModel.YearFrom || searchModel.YearFrom == 0) &&
(order.CreationTime.Year <= searchModel.YearTo || searchModel.YearTo == 0) &&
(order.CreationTime >= searchModel.DateFrom || searchModel.DateFrom == null) &&
(order.CreationTime <= searchModel.DateTo || searchModel.DateTo == null)
join productInfo in _productInfos
on orderItem.ProductInfoId equals productInfo.Id
join sheedProduct in _products
on productInfo.SheedProductId equals sheedProduct.Id
where (orderItem.SheedProductId == searchModel.SheedProductId || searchModel.SheedProductId == 0)
select new
{
order.CreationTime,
productInfo.IsBulk,
sheedProduct.Id,
order.TotalPrice,
sheedProduct.Title
})
.ToList();
и какая разница, если условие задано в последнем запросе или задано в запросе на соединение
Пример
var query =
(from order in _orders
join orderItem in _orderItems
on order.SheedOrderId equals orderItem.OrderId
join productInfo in _productInfos
on orderItem.ProductInfoId equals productInfo.Id
join sheedProduct in _products
on productInfo.SheedProductId equals sheedProduct.Id
where order.IsDone &&
(order.CreationTime.Year >= searchModel.YearFrom || searchModel.YearFrom == 0) &&
(order.CreationTime.Year <= searchModel.YearTo || searchModel.YearTo == 0) &&
(order.CreationTime >= searchModel.DateFrom || searchModel.DateFrom == null) &&
(order.CreationTime <= searchModel.DateTo || searchModel.DateTo == null) &&
(orderItem.SheedProductId == searchModel.SheedProductId || searchModel.SheedProductId == 0)
select new
{
order.CreationTime,
productInfo.IsBulk,
sheedProduct.Id,
order.TotalPrice,
sheedProduct.Title
})
.ToList();
, где установлено значение последнего запроса