2016-01-11 42 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

完美。還必須將ICollection更改爲IEnumerable上的預訂DTO類。謝謝。 – tintyethan

相關問題