簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM