在Linq
或Linq to Sql
中更准确:以下查询中== null
和IsNullOrEmpty
之间是否存在差异?
From a in context.SomeTable
where a.SomeId.Equals(SomeOtherId)
&& a.SomeOtherColumn == null
Select new .....
&安培;
From a in context.SomeTable
where a.SomeId.Equals(SomeOtherId)
&& string.IsNullOrEmpty(a.SomeOtherColumn)
Select new .....
答案 0 :(得分:5)
您无法在Linq-SQL中执行String.IsNullOrEmpty
:
方法'Boolean IsNullOrEmpty(System.String)'不受支持 转换为SQL。
如果你需要,我想你必须在where子句中同时进行null和empty检查:
&& (a.SomeOtherColumn == null || a.SomeOtherColumn == "")
这将转换为SQL中的空和空检查。
使用.Length == 0
查看其他答案,将生成SQL以检查varchar列的长度,这可能不如检查varchar是否等于''
。
编辑:这是关于SQL的长度与空检查的堆栈溢出answer。我猜对了。
答案 1 :(得分:1)
string.IsNullOrEmpty也适用于""
答案 2 :(得分:1)
最明显的区别在于名称。 IsNullOrEmpty
还会检查字符串是否为空。它等同于:
from a in context.SomeTable
where a.SomeId.Equals(SomeOtherId)
&& (a.SomeOtherColumn == null || a.SomeOtherColumn.Length == 0)
...
或者
from a in context.SomeTable
where a.SomeId.Equals(SomeOtherId)
&& (a.SomeOtherColumn == null || a.SomeOtherColumn == "")
...
答案 3 :(得分:1)
虽然其他答案已经说明.IsNullOrEmpty()
检查空字符串的明显事实,但同样重要的是要注意比较
where a.SomeOtherColumn == someNullVariable
永远不会返回LINQ-to-SQL中的任何值,因为使用了SQL null-comparison而不是C#null-comparison。 This is actually a bug in LINQ-to-SQL
答案 4 :(得分:0)
IsNullOrEmpty
等于
s == null || s.Length == 0;
其中s
是string