2013-05-29 2 views
0

Это утверждение с помощью Еогеасп, который я пытаюсь избавиться от:Как я могу сделать это с помощью одного оператора 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; 
    } 
} 
Смежные вопросы