如何提高具有“包含”运算符的LINQ查询的性能

时间:2018-12-04 07:24:02

标签: c# performance entity-framework linq

在执行以下代码时,我面临速度缓慢的问题。据我了解,“包含”运算符正在引起性能问题。

谁能帮我重写代码以获得更好的性能。

 var listOfBids = (from bid in PropPresUnitOfWork.Bid.GetAll()
                              join bidqueue in PropPresUnitOfWork.BidQueue.GetAll()
                              on bid.BidID equals bidqueue.BidID
                              join bidstatus in PropPresUnitOfWork.BidStatus.GetAll()
                              on bid.BidStatusID equals bidstatus.BidStatusID
                              where bid.LoanNumber == loanNo
                             && (openBids.Contains(bidstatus.BidStatusID))
                              && bidstatus.IsActive == true && (RolesCanDoReview.Contains(bidqueue.BidQueueTypeID))
                              select bidqueue).ToList();

注意:列出RolesCanDoReview = new List();
        列出openBids = new List(){2,3,4,5,6,7};

public virtual IQueryable<T> GetAll()
    {

        return DBSet;

    }  

1 个答案:

答案 0 :(得分:2)

在SQL中,contains转换为in过滤条件。从性能的角度来看,in / contains没什么问题。

该问题可能是由于缺少索引引起的。因此,要分析此问题,我将要做的是获取生成的sql,在SQL Server Management Studio中执行它,然后查看执行计划。

获取生成的sql的最简单方法是打开这样的日志记录:

using (var context = new MyDbContextClassNameHere())
{
    context.Database.Log = Console.Write;

    // Your code here...
}