【发布时间】:2019-04-20 16:33:44
【问题描述】:
所以我正在使用 LINQ 来检索名为 John 的第一个帐户的帐户电子邮件。但是,如果找不到,我想返回一个空字符串。
这是我的代码:
string Email = Accounts?.Where(x => x.Name == "John").Select(z => z.Email).First() ?? string.Empty
为什么返回 null 而不是空字符串?
【问题讨论】:
-
如果
Accounts不为空,但没有名为“John”的帐户,这实际上是做什么的,会导致InvalidOperationException崩溃,“序列不包含任何元素”。你可能想要FirstOrDefault(),而不是First()。 -
@gnud 谢谢这个作品不知道 FirstOrDefault()
-
该行永远不会返回
null。我对列表的几种变体进行了测试,它永远不会null:dotnetfiddle.net/tzLlM9 你要么得到一个空字符串,要么得到一个异常。 -
仅供参考:您可以将 Linq 查询压缩为:
Accounts?.FirstOrDefault(x => x.Name == "John")?.Email ?? "" -
@elgonzo 不错,但如果这是一个像 Entity Framework 这样的 LINQ 提供程序,你可能需要
Select,这样你就不会获取整个 Account 对象。