Linq语法相互转换()

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,
            };
————————
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,
            };