Оптимизация запросов для EF Query - PullRequest
0 голосов
/ 30 августа 2018

Я использую ядро ​​EF для выполнения сложного запроса. Мне нужно использовать group by и выбрать лучший результат из группы, а затем выполнить фильтр в верхних строках каждой группы.

Когда я использую профилировщик EF, он показывает, что запрос извлек 21647 строк, а конечный результат после фильтра равен 28. Я предполагаю, что EF использует запрос where после извлечения столбцов из БД.

Вот структура запроса.

private IQueryable<long> GetAssignedIds(int? lpId = null, int? customerTenantId = null)
{
    var islpAdmin = _permissionChecker.IsGranted(AppPermissions.Pages_PP_lpAdmin);
    var query = (
        from -------QUERY--------------------
        join -------QUERY--------------------
        join -------QUERY--------------------
        join -------QUERY--------------------
        select new
        {
            -----SELECT VARIABLES----------
        })
        .OrderBy(c => c.Priority)
        .GroupBy(c => new { c.ScpId, c.OrderId })
        .Select(c => c.FirstOrDefault())
        .WhereIf(lpId.HasValue, c => c.lpId == lpId)
        .WhereIf(islpAdmin, c => c.lpId == currentTenantId)
        .WhereIf(!islpAdmin, c => c.eId == currentTenantId)
        .Select(c => c.ScoId)
        .Distinct();
}

Как я могу оптимизировать этот запрос? Я знаю, что .Select(c => c.FirstOrDefault()) проблема здесь, но я не могу найти правильную альтернативу здесь.

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