c# - 如何最好地组合这两个 LINQ 表达式?

标签 c# linq .net-4.0

第一个表达式使用另一个标识值检索联系人的 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() 来明确表示您确实只期望一个结果。

另一种选择是使用 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);

关于c# - 如何最好地组合这两个 LINQ 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569383/

相关文章:

c# - 多列的 LINQ GroupBy

c# - 使用 Lambda 的内部连接 ​​(LINQ)

asp.net - 我可以在 IHttpModule 中向客户端发送响应后拦截吗

c# - LINQ 中的 `from..where` 或 `FirstOrDefault`

c# - 如何对派生自 List<T> 的对象进行深度复制

c# - 如何通过更改同一 ListView 行中下拉列表的项目来更新文本框中的文本

c# - SHA-256 NodeJS 与 .NET C#

c# - LINQ-to-MongoDB - 仅当 2 列之间的值匹配时返回列表

c# - 停止异步进程永远运行?

.net - .NET 4.0 中代码契约的实际用途是什么?