SubSonic3 Linqクエリは、「IS NULL」ではなく「IS NOT NULL」を生成します
質問
ここに私のlinqクエリがあります:
var test = from m in db.Members where m.UserId == null select m.Id;
test.ToList();
UserIdは、ASP.NETメンバーシップテーブルaspnet_memberに対応するメンバーテーブルのNULL値を許可するGuidフィールドです。ユーザーIDがnullである場所を選択するsubsonicを介してクエリを生成できません。nullでない場所でのみです。
ここに私の期待される出力があります:
SELECT Id FROM Member WHERE UserId IS NULL
ここに実際の出力があります:
SELECT Id FROM Member WHERE UserId IS **NOT** NULL
考えはありますか?デバッグ中ですが、誰か他の人がこれに遭遇した可能性があります。
解決
VisitBinaryメソッドにはExpressionType.Equalsの実装はありませんでした。最近、ここで見つけることができるパッチがありました:
古いコードは:
case ExpressionType.Equal:
case ExpressionType.NotEqual:
if (right.NodeType == ExpressionType.Constant)
{
ConstantExpression ce = (ConstantExpression)right;
if (ce.Value == null)
{
this.Visit(left);
sb.Append(" IS NOT NULL");
break;
}
}
else if (left.NodeType == ExpressionType.Constant)
{
ConstantExpression ce = (ConstantExpression)left;
if (ce.Value == null)
{
this.Visit(right);
sb.Append(" IS NOT NULL");
break;
}
}
goto case ExpressionType.LessThan;
Equalの実装が追加されました。 Isは、NOT NOTとはほぼ同じですが、IS NOT NULLではなくIS NULLを出力します。
所属していません StackOverflow