我试图选择'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)
答案 0 :(得分:2)
查询是正确的。 currentTag
是一个与查询无关的局部变量。因此,表达式string.IsNullOrWhiteSpace(currentTag.Item2)
将在之前计算,甚至将其转换为SQL,结果为true
(1)或false
(0),这将是是p3
的价值。