сравнение между запросом Include и linq в Entity Framework - PullRequest
0 голосов
/ 01 июля 2019

Почему выполняется первый запрос? первый запрос выполняется за 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();

, где установлено значение последнего запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...