Subsonic 是亚音速';s CodingHorror是唯一的方法,在哪里是空的?

Subsonic 是亚音速';s CodingHorror是唯一的方法,在哪里是空的?,subsonic,subsonic3,Subsonic,Subsonic3,我正在尝试做一个简单的更新。。。其中ISNULL()使用亚音速ActiveRecord,而使其工作的唯一方法是使用CodingHorror。例如: public void MarkMessagesRead(long? from_person) { if (from_person.HasValue) { _db.Update<message>() .Set(x => x.is_

我正在尝试做一个简单的更新。。。其中ISNULL()使用亚音速ActiveRecord,而使其工作的唯一方法是使用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();
        }
    }
public void MarkMessagesRead(long?from_person)
{
如果(来自_person.HasValue)
{
_db.Update()
.Set(x=>x.is\u read==true)
其中(x=>x.from\u id==from\u person&&x.to\u id==people\u id)
.Execute();
}
其他的
{
新的亚音速.Query.codinghoror(_db.DataProvider,“更新消息集为”read=1,其中为空(从“_id”),到“_id=@toid”,人“.Execute();
}
}

我遗漏了什么吗?

您是否尝试执行“And”(x=>x.from\u id).IsEqualTo(null)?

这不起作用的原因有两个

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

db.Update()
.Set(x=>x.is\u read==true)
其中(x=>x.from\u id==from\u person&&x.to\u id==people\u id)
.Execute();

Where()
方法有错误-它丢失了比较类型,因此所有内容都变成了相等的比较,并且类似于CantableSoftware提供的代码应该可以工作-这两个问题已经在github的当前源代码中修复了!

所以我尝试了以下方法:_db.Update().Set(x=>x.is\u read==true)。其中(x=>x.to\u id==people\u id).和(x=>x.from\u id).IsEqualTo(null).Execute();但我得到的是:SubSonic.Query.Update“不包含”和“Duh-whoops”的定义,我想把和放在Where:“Where(x=>x.to\u id&&x.from\u id==null)”谢谢Rob。尝试过了,它编译并运行了,但没有更新记录。(在mysql上运行)。生成的SQL是UPDATE
messages
SET
是读取的
=@up\U是读取的,其中
来自id
=@0。应该是ISNULL()?最近是否已修复此问题?我正在运行一个稍旧的亚音速版本,在即将发布时不愿意立即更新。
db.Update<message>()
            .Set(x => x.is_read == true)
            .Where<message>(x => x.from_id == from_person && x.to_id == people_id)
            .Execute();