Linq == null vs IsNullOrEmpty - 不同或相同?

时间:2013-09-17 20:56:59

标签: c# linq linq-to-sql

LinqLinq to Sql中更准确:以下查询中== nullIsNullOrEmpty之间是否存在差异?

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 .....

5 个答案:

答案 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;

其中sstring

的实例