EF查询的查询优化

时间:2018-08-30 14:29:55

标签: sql performance linq asp.net-core entity-framework-core

我正在使用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())的问题,但是我在这里找不到合适的替代方法。

0 个答案:

没有答案
相关问题