0

该语句正在使用我试图摆脱的 foreach:

CBTAppointmentDto app = null;
ModifyAppointmentRequest alias = null;
Domain.PearsonVue.TestCenter center = null;
Exam exam = null;

var result = Session.QueryOver(() => alias)
                    .Where(x => x.Candidate.Id == candidateId)
                    .Where(x => x.EventType == "ApptCreated")
                    .JoinAlias(x => x.Exams, () => exam)
                    .JoinAlias(() => alias.TestCenter, () => center)
                    .SelectList(list => list
                                 .Select(() => exam.ExamName).WithAlias(() => app.TestName)
                                 .Select(() => exam.ExamSeriesCode)
                                                    .WithAlias(() => app.ExamSeriesCode)
                                 .Select(() => alias.AppointmentStartTime)
                                                    .WithAlias(() => app.TestDate)
                                 .Select(() => center.TestCenterName)
                                                    .WithAlias(() => app.TestCenterName))
                    .TransformUsing(Transformers.AliasToBean<CBTAppointmentDto>())
                    .List<CBTAppointmentDto>().ToList();

foreach (var cbtAppointmentDto in result)
{
     var session = Session.QueryOver<TestSession>()
                          .Where(x => x.SessionName == cbtAppointmentDto.ExamSeriesCode)
                          .SingleOrDefault();

     if (session == null) continue;
        cbtAppointmentDto.TestStartDate = session.TestsStartDate;
        cbtAppointmentDto.TestEndDate = session.TestsEndDate;
}

return result;

有没有办法只用一个QueryOver声明来做到这一点?

有什么建议么 ?

4

1 回答 1

1

保存往返使用带有 ToFutureValue 的批量选择

var sessions = results.Select(cbtAppointmentDto => Session.QueryOver<TestSession>()
                         .Where(x => x.SessionName == cbtAppointmentDto.ExamSeriesCode)
                         .FutureValue()).ToOList();

for (int i = 0; i < sessions.Count; i++)
{
    var session = sessions[i].Value;
    if (session != null)
    {
        results[i].TestStartDate = session.TestsStartDate;
        results[i].TestEndDate = session.TestsEndDate;
    }
}
于 2013-06-11T12:57:12.227 回答