在执行以下代码时,我面临速度缓慢的问题。据我了解,“包含”运算符正在引起性能问题。
谁能帮我重写代码以获得更好的性能。
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;
}
答案 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...
}