2013-07-31 61 views
0

我使用EF查找聯繫人,然後在圖中包含一個公司,然後將其放入DTO中。我只想要公司的DTO創建,如果它不存在,我不想包含空白的DTO。 (它在REST服務被轉移,我不想讓無數的空標籤。)實體框架5基於包含的動態選擇

return (from c in _dc.Contact.Include("Company") 
       where c.ContactId == id 
       select new ContactDto 
       { 
        ContactId = c.ContactId, 
        FirstName = c.FirstName, 
        LastName = c.LastName, 
        Company = new CompanyDto 
           { 
            CompanyId = c.Company.CompanyId, 
            Name = c.Company.Name 
           } 
       }).ToList(); 

這墜毀對於沒有與之相關的公司接觸。通常我會創建一個空白對象,但這將如上所述包含大量空白標籤。

我想這樣做(這顯然是不可能的)

return (from c in _dc.Contact.Include("Company") 
       where c.ContactId == id 
       select new ContactDto 
       { 
        ContactId = c.ContactId, 
        FirstName = c.FirstName, 
        LastName = c.LastName, 
        if (c.Company !=null) 
        { 
         Company = new CompanyDto 
           { 
            CompanyId = c.Company.CompanyId, 
            Name = c.Company.Name 
           } ; 
        } 
       }).FirstOrDefault(); 

預先感謝您

奧利

+0

左外連接是否適合您?你嘗試過嗎? – Nilesh

+0

很抱歉,響應緩慢。我沒有試過,我會讓你知道的。謝謝回覆。 – Oli

回答

0

也許你可以用一個三元運營商嘗試:

  Company = (c.Company!=null)? 
       (new CompanyDto 
       { 
        CompanyId = c.Company.CompanyId, 
        Name = c.Company.Name 
       }) 
       :null 
+0

我試過這個,我相信我有一個錯誤,說設置聯繫人爲null是無效的。 – Oli

0

嘗試類似這樣的東西。我沒有VS在我面前,所以你需要注意語法。

return (from c in _dc.Contact 
       join co in _dc.Company on c.CompanyId equals co.CompanyId into subCompanies 
       from sc in subCompanies.DefaultIfEmpty() 
       where c.ContactId == id 
       select new ContactDto 
       { 
        ContactId = c.ContactId, 
        FirstName = c.FirstName, 
        LastName = c.LastName, 
        Company = sc 
       }).FirstOrDefault()