实体框架中的Include和linq查询之间的比较

时间:2019-07-01 10:55:08

标签: c# linq entity-framework-6 include

为什么第一个查询正在运行? 第一个查询在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 s

查询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();

在查询的最后一个位置设置竞争条件

0 个答案:

没有答案