首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SubSonic3 Linq查询生成"IS NOT NULL“而不是"IS NULL”

SubSonic3 Linq查询生成"IS NOT NULL“而不是"IS NULL”
EN

Stack Overflow用户
提问于 2009-09-17 17:37:51
回答 1查看 962关注 0票数 0

下面是我的linq查询:

代码语言:javascript
复制
 var test = from m in db.Members where m.UserId == null select m.Id;
        test.ToList();

UserId是members表上的一个可以为空的Guid字段,它对应于ASP.NET成员资格表aspnet_member。我无法通过subsonic生成查询,该查询将选择userid为null的位置,只有不为null的位置。

以下是我的预期输出:

代码语言:javascript
复制
 SELECT Id FROM Member WHERE UserId IS NULL

以下是我的实际输出:

代码语言:javascript
复制
 SELECT Id FROM Member WHERE UserId IS **NOT** NULL

有什么想法吗?我正在调试过程中,但可能是其他人遇到了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-17 18:31:39

事实证明,在VisitBinary方法中没有实现ExpressionType.Equals。最近有一个补丁可以在这里找到:

[http://github.com/subsonic/SubSonic-3.0/blob/master/SubSonic.Core/Linq/Structure/TSqlFormatter.cs][1]

旧的代码是:

代码语言:javascript
复制
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 NULL而不是is NOT NULL之外,IS与NotEqual几乎相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1440263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档