2013-02-10 6 views
1
 var query = 
      (from Contact con in e.Results 
      from ContactPhoneNumber phn in con.PhoneNumbers 
      from ContactEmailAddress email in con.EmailAddresses.DefaultIfEmpty() 
      where con.DisplayName.Contains(txtContasctSearch.Text) 
      select new person() 
      { 
       displayName = con.DisplayName, 
       displayEmail = (email.EmailAddress == null ? String.Empty : email.EmailAddress), 
       displayPhone = phn.PhoneNumber 
      }).ToList(); 

Поле EmailAddress не всегда доступно. Тем не менее, я все равно хотел бы вернуть его, если он существует. Однако я хочу подражать Left Join, код выше возвращает ошибку.Linq with LEFT Join

Любые идеи?

Ошибки я получаю это:

System.NullReferenceException occurred 
    _HResult=-2147467261 
    _message=NullReferenceException 
    HResult=-2147467261 
    Message=NullReferenceException 
    Source=wpChoreList 
    StackTrace: 
     at wpChoreList.personSetup.<Contacts_SearchCompleted>b__8(<>f__AnonymousType1`2 h__TransparentIdentifier1) 
    InnerException: 
+3

_Что делает ошибка? _ – SLaks

+0

Предлагаю вам взглянуть на этот вопрос - http: // stackoverf low.com/questions/700523/linq-to-sql-left-outer-join –

ответ

2

Вы проверяете неверное значение для нуля:

displayEmail = (email.EmailAddress == null ? String.Empty : email.EmailAddress), 

электронной почта должна быть пустой, не email.EmailAddress, попробуйте изменить эту строку в этот один:

displayEmail = (email == null ? String.Empty : email.EmailAddress), 
+0

Вот и все! Дай что-нибудь так просто ... Спасибо. Я буду награждать как ответ, как только это позволит мне. – webdad3