【问题标题】:C# - How to give a default value using LINQ when the value returned is nullC# - 当返回值为空时如何使用 LINQ 给出默认值
【发布时间】: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。我对列表的几种变体进行了测试,它永远不会nulldotnetfiddle.net/tzLlM9 你要么得到一个空字符串,要么得到一个异常。
  • 仅供参考:您可以将 Linq 查询压缩为:Accounts?.FirstOrDefault(x => x.Name == "John")?.Email ?? ""
  • @elgonzo 不错,但如果这是一个像 Entity Framework 这样的 LINQ 提供程序,你可能需要Select,这样你就不会获取整个 Account 对象。

标签: c# linq null


【解决方案1】:

你使用了三元 if。你应该写到 else 条件。例如:

string Email = Accounts?.Where(x => x.Name == "John").Select(z => z.Email).First() ?? string.Empty : Accounts?.Where(x => x.Name == "John").Select(z => z.Email).First()

你可以试试这个吗?

【讨论】:

    【解决方案2】:

    如果您的查询返回 null,您可以尝试使用 null 合并将其设置为空字符串:

    string email = Accounts?.Where(x => x.Name == "John").FirstOrDefault()?.Email ?? string.Empty;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多