0

「値」列が null または空白であるすべての行を選択しようとしています。これは nvarchar 型で、null が許可されています。

次のクエリを実行すると、正しい 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クエリとは関係のないローカル変数です。したがって、式はSQL に変換されるstring.IsNullOrWhiteSpace(currentTag.Item2)に評価され、結果は(1) または(0) のいずれかになり、これが の値になります。truefalsep3

于 2012-08-28T11:27:16.627 に答える