Выполнение запроса к базе данные с помощью LINQ и EF (GroupJoin, Include, Where)

Я правильно понимаю, что при выполнении этого запроса сначала будет выполнятся Join между InternalOrders и CrmUsers, а уже затем из получившегося списка compliments с помощью Where выбираются те элементы, в которых AdvancedInfo не пустая строка? Или EF неявно оптимизирует запрос при построении плана запроса? Если EF не оптимизирует автоматически, то как можно оптимизировать вручную? Не хотелось бы выполнять Join для лишних строк.

Вообще, цель в том, чтобы выбрать не удалённые заказы за определённый период (таблица InternalOrders), сделанные пользователями у которых есть Remarks или/и CrmUserRemarks, (таблица CrmUsers)

var compliments = FusionContext.InternalOrders
.Where(x => !x.Deleted && x.CreateDateTime >= startDateTime.Date && x.CreateDateTime <= endDateTime.Date)
.GroupJoin(FusionContext.CrmUsers
    .Include(x => x.CrmUserRemarks),
    order => order.HolderId,
    user => user.HolderId,
    (order, user) => new { order, usergroup = user.DefaultIfEmpty() })
    .Select(compliment => new Compliment
    {
        OrderId = compliment.order.OrderId.ToInt(),
        OperatorName = compliment.order.Operator,
        Phone = compliment.order.PhoneNumber,
        GuestName = compliment.usergroup.FirstOrDefault().FirstName,
        AdvancedInfo = $"{compliment.usergroup.FirstOrDefault().Remarks}\n{string.Join('\n', compliment.usergroup.FirstOrDefault().CrmUserRemarks.Select(x => x.Name))}",
        ApplyTime = compliment.order.CreateDateTime.GetValueOrDefault(),
        ClientId = compliment.order.HolderId.GetValueOrDefault()
    }).AsEnumerable()
    .Where(x => !string.IsNullOrEmpty(x.AdvancedInfo.Trim())).ToList();

Ответы (0 шт):