0

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

5 回答 5

6

你不能String.IsNullOrEmpty在 Linq-SQL 中做:

方法“Boolean IsNullOrEmpty(System.String)”不支持对 SQL 的转换。

如果你需要,我想你必须在你的 where 子句中同时检查 null 和 empty:

&& (a.SomeOtherColumn == null || a.SomeOtherColumn == "")

这将转换为 SQL 中的 null 和空检查。

查看其他答案,使用.Length == 0, 将生成 SQL 来检查 varchar 列的长度,这可能比检查 varchar 是否等于 效率低''

编辑:这是关于 SQL 的长度与空检查的堆栈溢出答案。看来我猜对了。

于 2013-09-17T20:59:24.927 回答
1

string.IsNullOrEmpty 也适用于空字符串,例如""

于 2013-09-17T20:59:50.753 回答
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 == "")
...
于 2013-09-17T21:00:05.453 回答
1

虽然其他答案已经说明了检查空字符串的明显事实.IsNullOrEmpty(),但同样重要的是要注意比较

where a.SomeOtherColumn == someNullVariable

由于使用 SQL 空比较而不是 C# 空比较,因此永远不会在 LINQ-to-SQL 中返回任何 值这实际上是 LINQ-to-SQL 中的一个错误

于 2013-09-17T21:06:52.197 回答
0

IsNullOrEmpty等于

s == null || s.Length == 0;

s实例在哪里string

于 2013-09-17T21:02:13.687 回答