c# - 为什么一个空字符串连接到一个非空字符串评估为空?

标签 c# .net linq linq-to-entities

 var users=db.Users.Where(u => u.Name.StartsWith(term) || u.Email.StartsWith(term) || u.FirstName.StartsWith(term)).ToArray();
 var jsos=users.Select(u => new { label = u.FirstName  +" "+  u.Name+ " (" + u.Email+")", value = u.Id });

按预期工作。但是,如果没有 ToArray(),我会得到看起来很奇怪的行为:null firstName 导致标签被评估为 。使用 ToArray() 我得到了预期的行为。 (null 被视为空字符串并连接到其他非空字符串)。为什么?

最佳答案

在 SQL 世界中,根据定义,任何包含 NULL 的表达式都会成为 NULL。这是因为 NULL 表示不确定值 - 不确定值 + 任何其他值仍然是不确定值,即 NULL。

同样,在 SQL 中,您可以使用类似 COALESCE 的方法将 NULL 转换为空字符串——我不记得 linq 等价物是什么。

关于c# - 为什么一个空字符串连接到一个非空字符串评估为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941582/

相关文章:

c# - Linq Expression Slow - 如果可能需要优化

c# - 通过 ServiceStack UncaughtExceptionHandler 传递错误

c# - 如何使用 C# .Net 核心对 CBOR 二进制文档进行 COSE 签名?

c# - 如何防止用户从多个位置或同一台电脑上的不同浏览器登录

c# - 在 C# 中合并和更新两个列表

asp.net-mvc - Linq查询,如何orderby

c# - 如何在 WPF ToolBar 中使用标准的 Button 样式?

c# - 使用流保存 xml 文件会导致重复的根元素

.net - 使用 linq 组合对象

c# - Linq 查询删除包含特定匹配号码的所有数据