查询执行为1等于1而不是空检查

时间:2012-08-28 11:22:56

标签: .net nhibernate linq-to-sql linq-to-nhibernate

我试图选择'Value'列为null或空格的所有行。它的类型为nvarchar,允许为空。

执行时,以下查询不会生成正确的sql。

current.Where(
            a =>
            a.Data.All(ad => ad.AccountTag.Id != currentTag.Item1)
            || a.Data.Any(ad => ad.AccountTag.Id == currentTag.Item1 && string.IsNullOrWhiteSpace(currentTag.Item2)))

string.IsNullOrWhiteSpace函数转换为1 /* @p3 */ = 1

我已尝试使用上述功能,并且同时使用currentTag.Item2 == null || currentTag.Item2.Equals(string.Empty)两个结果相同。

下面的完整SQL

select data2_.Id from   [isnapshot.Client].[dbo].AccountData data2_
    where  account0_.Id = data2_.ClientAccountId
    and data2_.AccountTagId = 1 /* @p2 */
    and 1 /* @p3 */ = 1)

1 个答案:

答案 0 :(得分:2)

查询是正确的。 currentTag是一个与查询无关的局部变量。因此,表达式string.IsNullOrWhiteSpace(currentTag.Item2)将在之前计算,甚至将其转换为SQL,结果为true(1)或false(0),这将是是p3的价值。