2011-04-06 55 views
4

第一個表達式使用另一個標識值檢索聯繫人的ID。第二個表達式使用聯繫人ID檢索整個聯繫人。我似乎應該能夠將這兩個陳述合併爲一個,但我掙扎得太多(疲倦,強調,犯下愚蠢的錯誤等)。這兩個陳述是有效的,我得到了我需要的結果,但我覺得它可能更乾淨,可能只是一個表達。如何最好地結合這兩個LINQ表達式?

感謝大家的幫忙!

var contactId = DAL.dc.ContactMrns.Where(cm => cm.MRN == recipient.MRN) 
.Select(x => x.ContactId) 
.First(); 

var contact = DAL.dc.Contacts.Where(c => c.ContactID == contactId).First(); 

回答

5

嗯,這看起來可能是一個聯接:

var contact = (from cm in DAL.dc.ContactMrns 
       where cm.MRN == recipient.MRN 
       join c in DAL.dc.Contacts on c.ContactID equals cm.ContactID 
       select c).First(); 

請注意,您可能需要使用Single(),而不是First()要清楚你真的只希望得到一個結果。

另一種選擇是使用Single overload which takes an expression

var contact = DAL.dc.Contacts.Single 
    (c => c.ContactID == DAL.dc.ContactMrns.Single 
     (cm => cm.MRN == recipient.MRN).ContactID); 
0

你可以這樣做:

var contact = DAL.dc.Contacts.First(
    c => c.ContactID == DAL.dc.ContactMrns.First(
     cm => cm.MRN == recipient.MRN)); 
0

直接使用第二表達。由此,你有聯繫對象,並通過這兩個聯繫和contactId直接

0

當然,你可以,這只是一個問題,它是否會有用。

var contact = DAL.dc.Contacts.First(contact => 
     contact.ContactId == DAL.dc.ContactMrns.First(mrns => 
      mrns.MRN == recipient.MRN))