SubSonic的CodingHorror是WHERE ISNULL的唯一方法吗?

时间:2010-06-02 01:37:41

标签: subsonic subsonic3

我正在尝试使用SubSonic ActiveRecord进行简单的UPDATE ... WHERE ISNULL(),并且我可以通过使用CodingHorror来实现它的唯一方法。例如:

    public void MarkMessagesRead(long? from_person)
    {
        if (from_person.HasValue)
        {
            _db.Update<message>()
                .Set(x => x.is_read == true)
                .Where(x => x.from_id == from_person && x.to_id == people_id)
                .Execute();
        }
        else
        {
            new SubSonic.Query.CodingHorror(_db.DataProvider, "UPDATE messages SET is_read=1 WHERE ISNULL(from_id) AND to_id=@toid", people_id).Execute();
        }
    }

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

您是否尝试过“And(x =&gt; x.from_id).IsEqualTo(null)?

答案 1 :(得分:1)

cantabilesoftware提供的代码应该可以工作 - 这两个问题已经在github的当前源代码中修复了!

答案 2 :(得分:0)

这有两个原因导致它无效。

首先,它应该是Where<message>()而不是Where()

db.Update<message>()
            .Set(x => x.is_read == true)
            .Where<message>(x => x.from_id == from_person && x.to_id == people_id)
            .Execute();

Where()方法存在错误 - 它丢失了比较类型,因此所有内容都成为等式和运算符的比较,例如&lt; &lt; =等..都迷路了。此外,它仅使用第一次比较。在上面的示例中,&& x.to_id == people_id被静默丢弃。

其次,sub-sonic对==null!=null的支持已被注释掉。

我已经在sub-sonic的github中记录了这两个问题: