2013-07-31 3 views
0

Я использую EF, чтобы найти контакт, а затем включить компанию в график, а затем поместить ее в DTO. Я хочу, чтобы компания DTO создавалась, если она существует, я не хочу включать пустой DTO, если это не так. (Это передается в службу REST, и я не хочу, бесчисленное количество пустых тегов.)Динамический выбор Entity Framework 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

Я пробовал это, я считаю, что у меня возникла ошибка, указав, что параметр Contact to 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() 
Смежные вопросы