2016-01-11 2 views
1

Я пытаюсь вывести список встреч с их соответствующими заказами. Насколько я понимаю, я должен поместить свои данные в DTO. Я могу получить список встреч с этим ...Включая связанные объекты в объект передачи данных

 var meetings = from m in db.meetings.Take(2) 
        select new MeetingDTO() 
        { 
         meetingid = m.meetingid, 
         meetingname = m.meeting_name, 
         businessname = m.business.name 
        }; 

     return meetings; 

Я пробовал несколько различных методов, включая данные, касающиеся бронирования, но не могу понять синтаксис вне.

Я знаю, что это далеко, но это идея о том, что я иду ...

 var meetings = from m in db.meetings.Take(2) 
        select new MeetingDTO() 
        { 
         meetingid = m.meetingid, 
         meetingname = m.meeting_name, 
         businessname = m.business.name, 
         bookingsDTOs = from b in db.bookings 
             select new bookingsDTO() 
             { 
              bookingid = b.bookingid, 
              bookingname = b.name 
             }; 
        }; 

     return meetings; 

Это моя DTO структура ...

namespace testapi.Models 
{ 
    public class MeetingDTO 
    { 
     public int meetingid { get; set; } 
     public string meetingname { get; set; } 
     public string businessname { get; set; } 
     public virtual ICollection<bookingsDTO> bookingsDTOs { get; set; } 
    } 

    public class bookingsDTO 
    { 
     public int bookingid { get; set; } 
     public string bookingname { get; set; } 
    } 
} 

ответ

3

Вы можете использовать Include метод расширения явно загрузить соответствующий объект как часть вашего запроса:

var meetings = from m in db.meetings.Include(m=>m.bookings).Take(2) 
       select new MeetingDTO() 
       { 
        meetingid = m.meetingid, 
        meetingname = m.meeting_name, 
        businessname = m.business.name 
        bookingsDTOs = m.bookings.Select(b=>new bookingsDTO() 
                 { 
                 bookingid = b.bookingid, 
                 bookingname = b.name 
                 }) 
       }; 
return meetings; 

для того, чтобы легче вашей жизни я предлагаю вам взглянуть на Automapper. Вы можете сделать что-то вроде этого, как только вы настроить отображение:

var meetings = from m in db.meetings.Include(m=>m.bookings).Take(2).ProjectTo<MeetingDTO>(); 

Это tutorial является хорошим началом.

+0

Perfect. Пришлось также изменить ICollection на IEnumerable в классе bookingsDTO. Благодарю. – tintyethan

Смежные вопросы