Является ли SubSonic CodingHorror единственным способом сделать ГДЕ НЕТ - PullRequest
1 голос
/ 02 июня 2010

Я пытаюсь сделать простое ОБНОВЛЕНИЕ ... ГДЕ ISNULL () с использованием SubSonic 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();
        }
    }

Я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Вы пытались сделать "And (x => x.from_id) .IsEqualTo (null)?

1 голос
/ 29 июня 2010

Код, предоставленный cantabilesoftware, должен работать - две проблемы были исправлены в текущем источнике на github!

0 голосов
/ 15 июня 2010

Есть две причины, почему это не сработало.

Во-первых, это должно быть 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() есть ошибки - он теряет тип сравнения, поэтому все становится сравнением на равенство, а операторы типа <<= и т.д .. все теряются. Кроме того, он использует только первое сравнение. В приведенном выше примере <code>&& x.to_id == people_id молча отбрасывается.

Во-вторых, поддержка sub-sonic для ==null и !=null закомментирована.

Я зарегистрировал обе эти проблемы в GitHub sub-sonic:

...