Я пытаюсь написать запрос linq на asp core 2 с Entity Framework Core и все в порядке, запрос возвращает правильный результат, но очень медленно.
var Query1 =
from demand in _prabacontext.Demand
join demandspec in _prabacontext.DemandSpec on demand.Id equals demandspec.DemandId into demandspecGroup
join manager in _prabacontext.Manager on demand.ManagerId equals manager.Id into managerGroup
from m in managerGroup.DefaultIfEmpty()
join contractor in _prabacontext.Contractor on demand.ContractorId equals contractor.Id into contractorGroup
from c in contractorGroup.DefaultIfEmpty()
join company in _prabacontext.Company on c.CompanyId equals company.Id into companyGroup
from cm in companyGroup.DefaultIfEmpty()
where demand.RegDate >= Convert.ToDateTime("2018-01-01T00:00:00")
select new
{
demand.Id,
demand.Id1,
RegDate = demand.RegDate.ToString("yyyy-MM-dd"),
demand.IsLgot,
demand.ContractorId,
demand.DocNumber,
demand.DocStatus,
demand.ManagerId,
demand.Remark,
StrSum = demandspecGroup.Sum(x => (decimal?)(x.Price * x.Quantity)) ?? 0,
ContractorName = cm.Name,
ManagerName = m.Name1//+' '+m.Name2+' '+m.Name3
};
В журнале отладчика этот запрос linq транслируется в следующий оператор SQL:
SELECT
"demand"."_ID" AS "Id0",
"demand"."Contractor_ID" AS "ContractorId",
"demand"."DocNumber",
"demand"."DocStatus",
"demand"."ID" AS "Id1",
"demand"."Insert_Date",
"demand"."Insert_User",
"demand"."IsLgot",
"demand"."IsTender",
"demand"."last_updated",
"demand"."Manager_ID" AS "ManagerId",
"demand"."RegDate",
"demand"."Remark" AS "Remark0",
"demandspec"."_ID",
"demandspec"."Commerc_ID",
"demandspec"."DeliveryDate",
"demandspec"."_Demand_ID",
"demandspec"."Demand_ID",
"demandspec"."FinType_ID",
"demandspec"."Goods2_ID",
"demandspec"."Goods_ID",
"demandspec"."GoodsUnion_ID",
"demandspec"."ID",
"demandspec"."last_updated",
"demandspec"."Price",
"demandspec"."Quantity",
"demandspec"."Remainder",
"demandspec"."Remark",
"demandspec"."Reserv"
FROM
"Demand" AS "demand"
LEFT JOIN
"Demand_Spec" AS "demandspec" ON "demand"."_ID" = "demandspec"."_Demand_ID"
ORDER BY
"Id0"
SELECT "manager"."id", "manager"."name1"
FROM "manager" AS "manager"
SELECT "contractor"."id", "contractor"."company_id"
FROM "maxim"."contractor" AS "contractor"
SELECT "company"."id", "company"."name"
FROM "maxim"."company" AS "company"`
Возвращает данные из запроса и программно объединяет выходные данные.Но эта таблица очень большая.Я знаю, что могу написать запрос SQL напрямую, но я хочу использовать linq.
Как мне написать запрос Linq, что перевести в запрос SQL с несколькими левыми объединениями?
Добавлено:
В журнале отладки я нахожу такие строки:
Не удалось перевести выражение LINQ 'DefaultIfEmpty ()', и оно будет оценено локально
Для каждой таблицы в запросе.Как я могу переписать свой запрос без этой конструкции?