我有一个场景,我需要允许空的重复项并拒绝其他类型的重复项,因此在使用以下查询插入新记录之前,我要检查现有记录。
this.dbContext.Employees.FirstOrDefault(t =>!string.IsNullOrEmpty(t.Name) && !string.IsNullOrEmpty(newRecord.Name) && t.Name.Trim().Equals(newRecord.Name.Trim(), StringComparison.InvariantCultureIgnoreCase));
问题是,当我有以下数据时:
oldRecord.Name=" "
newRecord.Name=" "
上述查询返回Null。这很奇怪,因为
!string.IsNullOrEmpty(" ")
的- 结果为真
" ".Trim().Equals(" ".Trim(), StringComparison.InvariantCultureIgnoreCase)
的结果为真
所以上面的查询应该会给我结果。
知道我为什么会有这种行为吗?上述查询是否会在客户端进行评估?
为此,还有一个名为IsNullOrWhiteSpace
的方法,它具有"更宽的";应用程序并按您的期望工作:
var whiteSpaceStrings = new string[]
{
" ", // some spaces
" ", // some tabs
string.Empty, // empty
"", // empty
};
foreach (var str in whiteSpaceStrings)
{
Console.WriteLine(string.IsNullOrWhiteSpace(str));
}
它打印所有true
:(
回答您的疑问:IsNullOrEmpty
检查字符串是null
还是空的,但空字符串是没有任何字符的字符串。空白(任意(是字符本身:(