2011-01-10 57 views
0

下一頁SubSonic3查詢給我一個錯誤:SubSonic3 SetExpression問題

Db.Update<Tag>() 
    .SetExpression("Popularity") 
    .EqualTo("Popularity+1") 
    .Where<Tag>(x => x.TagId == tagId) 
    .Execute(); 

錯誤:未能信息:System.FormatException:未能參數值從String到的Int32轉換。

生成的sql可以,但參數集合包含兩個需要設置的參數。

UPDATE [Tagging].[Tag] 
SET Popularity=Popularity+1 
WHERE [Tagging].[Tag].[TagId] = @0 

其中一個參數將@up_Popularity設置爲'Popularity + 1'。由於這是第一個設置的參數,因此sql triese將此字符串「Popularity + 1」分配給一個整數。

這是一個錯誤還是我做錯了什麼?

回答

1
Db.Update<Tag>() 
    .SetExpression("Popularity = Popularity + 1") 
    .Where<Tag>(x => x.TagId == tagId) 
    .Execute(); 

這應該工作...但我認爲這是批發的更新。不確定。你最好的選擇是使用我們的CodingHorror:

new CodingHorror("UPDATE Tags SET Popularity = Popularity + 1 WHERE @1", 
    tagId).Execute(); 
0

如果這本該工作,我會驚訝。當我需要將一個字符串作爲SQL的一部分(而不是SubSonic)進行評估時,我幾乎總是不得不使用CodingHorror

但是,您應該可以通過使用單獨的查詢來完成此操作。喜歡的東西:

Db.Update<Tag>() 
    .Set("Popularity") 
    .EqualTo(Tag.SingleOrDefault(t => t.TagId == tagId).Popularity + 1) 
    .Where<Tag>(x => x.TagId == tagId) 
    .Execute(); 
+0

好吧,像這樣它可能會工作,但你必須去兩次的數據庫。 – 2011-01-10 18:26:53

+0

我認爲我的查詢應該definetely工作,但由於subsonic創建兩個sql參數,它不起作用。 – 2011-01-10 18:29:02

相關問題