2013-05-29 64 views
0

此語句使用我正努力擺脫一個foreach:如何才能做到這一點有一個QueryOver聲明

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語句來做到這一點?

有什麼建議嗎?

+1

'的.List ()選擇ToList();'是多餘的。 '.List ();'就夠了 – Firo

回答

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; 
    } 
} 
相關問題