var query = subTaskQuery
.Join(configQuery, st => st.Status, c => c.Id, (st, c) => new { st, c }).DefaultIfEmpty()
.Join(routineTaskQuery, join => join.st.ParentRoutineTaskID, rt => rt.Id, (join, rt) => new { join.st, join.c, rt }).DefaultIfEmpty()
.Join(taskTypeQuery, join => join.rt.TaskType, tt => tt.Id, (join, tt) => new { join.st, join.c, join.rt, tt }).DefaultIfEmpty()
.Join(routineTaskQuery, join => join.st.UnionRoutineTaskID, rtt => rtt.Id, (join, rtt) => new { join.st, join.c, join.rt, join.tt, rtt }).DefaultIfEmpty()
.Join(taskTypeQuery, join => join.rtt.TaskType, ttp => ttp.Id, (join, ttp) => new { join.st, join.c, join.rt, join.tt, join.rtt, ttp }).DefaultIfEmpty()
.Select(join => new TKSuperQueryTableDto()
{
Id = join.st.Id,
PeriodId = join.rtt.PeriodID,
ParentTaskCode = join.rt.Code,
ParentTaskTypeId = join.tt.Id,
ParentTaskName = join.tt.TaskTypeName,
ParentTaskResponsibleId = join.rt.Responsible,
UnionTaskCode = join.rtt.Code,
UnionTaskTypeId = join.ttp.Id,
UnionTaskName = join.ttp.TaskTypeName,
UnionTaskResponsibleId = join.rtt.Responsible,
TaskStatusId = join.c.Id,
TaskStatus = join.c.EnDec,
CreateDate = join.st.CreationTime,
LastUpdateDate = join.st.LastModificationTime,
StartDate = join.st.StartDate,
EndDate = join.st.EndDate,
DeadLine = join.st.DeadLine,
CreatorId = join.st.CreatorId,
ResponsibleId = join.st.UserID,
});
var query = from st in subTaskQuery
join c in configQuery
on st.Status equals c.Id into cJoin
from c in cJoin.DefaultIfEmpty()
join rt in routineTaskQuery
on st.ParentRoutineTaskID equals rt.Id into rtJoin
from rt in rtJoin.DefaultIfEmpty()
join tt in taskTypeQuery
on rt.TaskType equals tt.Id into ttJoin
from tt in ttJoin.DefaultIfEmpty()
join rtt in routineTaskQuery
on st.UnionRoutineTaskID equals rtt.Id into rttJoin
from rtt in rttJoin.DefaultIfEmpty()
join ttp in taskTypeQuery
on rtt.TaskType equals ttp.Id into ttpJoin
from ttp in ttpJoin.DefaultIfEmpty()
select new TKSuperQueryTableDto()
{
Id = st.Id,
PeriodId = rtt.PeriodID,
ParentTaskCode = rt.Code,
ParentTaskTypeId = tt.Id,
ParentTaskName = tt.TaskTypeName,
ParentTaskResponsibleId = rt.Responsible,
UnionTaskCode = rtt.Code,
UnionTaskTypeId = ttp.Id,
UnionTaskName = ttp.TaskTypeName,
UnionTaskResponsibleId = rtt.Responsible,
TaskStatusId = c.Id,
TaskStatus = c.EnDec,
CreateDate = st.CreationTime,
LastUpdateDate = st.LastModificationTime,
StartDate = st.StartDate,
EndDate = st.EndDate,
DeadLine = st.DeadLine,
CreatorId = st.CreatorId,
ResponsibleId = st.UserID,
};