如何最好地组合这两个 LINQ 表达式



第一个表达式使用另一个标识值检索联系人的 ID。第二个表达式使用联系人 ID 检索整个联系人。似乎我应该能够将这两个陈述合并为一个,但我挣扎得太多了(疲倦、压力大、犯愚蠢的错误等)。这两个语句有效,我得到了我需要的结果,但我觉得它可以更干净,可能是一个单一的表达式。

感谢大家的帮助!

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();

好吧,看起来这可能是一个连接:

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()来明确您实际上只期望一个结果。

另一种选择是使用单个重载,它采用表达式:

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

直接使用第二个表达式。通过,你有联系人对象,并且直接联系和接触ID

你可以做:

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

当然,你可以,这只是它是否有用的问题。

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

相关内容

  • 没有找到相关文章

最新更新