Как повысить производительность запроса LINQ с оператором «Содержит» - PullRequest
0 голосов
/ 04 декабря 2018

Я сталкиваюсь с медлительностью при выполнении кода ниже.Насколько я понимаю, «Содержит» Оператор вызывает проблемы с производительностью.

Может кто-нибудь помочь мне переписать код для повышения производительности.

 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 ();
Список openBids = новый список () {2, 3, 4, 5, 6, 7};

public virtual IQueryable<T> GetAll()
    {

        return DBSet;

    }  

1 Ответ

0 голосов
/ 04 декабря 2018

A contains переводит в состояние фильтра in в sql.С точки зрения производительности нет ничего плохого в in / contains.

Возможно, проблема вызвана отсутствием индекса.Поэтому для анализа этой проблемы мне нужно было бы получить сгенерированный sql, выполнить его в SQL Server Management Studio и взглянуть на план выполнения.

Самый простой способ получить сгенерированный sql - это включитьпри входе в систему, как это:

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

    // Your code here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...