2010-06-02 24 views
1

我想做一個簡單的更新... WHERE ISNULL()使用SubSonic ActiveRecord和唯一的方法,我可以得到它的工作是通過使用CodingHorror。例如:是SubSonic的CodingHorror做WHERE ISNULL的唯一方法嗎?

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 [email protected]", people_id).Execute(); 
     } 
    } 

我錯過了什麼嗎?

回答

1

通過cantabilesoftware提供應該工作的代碼 - 這兩個問題已得到修復在github的當前源代碼中!

+0

太棒了。謝謝。 – 2010-06-30 23:01:16

2

你嘗試做一個「和(x => x.from_id).IsEqualTo(空)?

+0

所以我只是嘗試這樣做: _db.Update () .SET(X => x.is_read ==真) 。凡(X => x.to_id == people_id)。而(X = > x.from_id).IsEqualTo(null) .Execute(); 但我得到這個: SubSonic.Query.Update '不包含定義‘和’ – 2010-06-03 00:26:35

+0

咄 - 哎呦我的意思粘而在其中:「其中(x => x.to_id && X .from_id == null)「 – 2010-06-04 20:35:34

+0

感謝羅布。試過,它編譯和運行,但沒有記錄更新。 (針對mysql運行)。生成的SQL是UPDATE'messages' SET'is_read' = @ up_is_read WHERE'from_id' = @ 0。應該是ISNULL()?這個問題最近是否解決了?我正在運行一個稍微舊版本的亞音速,並且現在我們即將發佈,因此不願立即更新。 – 2010-06-07 14:15:55

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()方法有缺陷 - 它失去比較類型,使一切都變得平等和運營商如< < =等比較..所有迷路此外,它只使用。第一個比較。在上面的例子中,&& x.to_id == people_id被無聲丟棄。其次,亞音速對==null!=null的支持已被註釋掉。

我登錄這兩個問題在亞音速的github上:

相關問題