0

我正在尝试选择“值”列为空或空格的所有行。它是 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)
4

1 回答 1

2

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

于 2012-08-28T11:27:16.627 回答