[英]How to improve the performance for LINQ query which has "Contains" Operator
在執行以下代碼時,我遇到了緩慢的問題。 根據我的理解,“包含”運算符導致了性能問題。
誰能幫我重寫代碼以獲得更好的性能。
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();
注意:List RolesCanDoReview = new List();
List openBids = new List() { 2, 3, 4, 5, 6, 7 };
public virtual IQueryable<T> GetAll()
{
return DBSet;
}
A contains
轉換為 sql 中的in
過濾條件。 從性能的角度來看, in
/ contains
沒有任何問題。
該問題可能是由缺少索引引起的。 那么我分析這個問題要做的是獲取生成的sql,在SQL Server Management Studio中執行它並查看執行計划。
獲取生成的 sql 的最簡單方法是像這樣打開日志記錄:
using (var context = new MyDbContextClassNameHere())
{
context.Database.Log = Console.Write;
// Your code here...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.