我正在尝试使用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();
}
}
我错过了什么吗?
答案 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中记录了这两个问题: