首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SubSonic3 SetExpression问题

SubSonic3 SetExpression问题
EN

Stack Overflow用户
提问于 2011-01-10 18:40:53
回答 2查看 124关注 0票数 0

下一个SubSonic3查询给出了一个错误:

代码语言:javascript
复制
Db.Update<Tag>()
    .SetExpression("Popularity")
    .EqualTo("Popularity+1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

错误:失败: System.FormatException :无法将参数值从字符串转换为Int32。

生成的sql没有问题,但是参数集合包含两个需要设置的参数。

代码语言:javascript
复制
UPDATE [Tagging].[Tag] 
SET Popularity=Popularity+1
WHERE [Tagging].[Tag].[TagId] = @0

其中一个参数将@up_Popularity设置为“Popularity+1”。因为这是设置的第一个参数,所以string将这个字符串'Popularity+1‘赋给一个整数。

这是一个bug,还是我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-11 02:44:42

代码语言:javascript
复制
Db.Update<Tag>()
    .SetExpression("Popularity = Popularity + 1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

这应该行得通。但我想它是用来批量更新的。不确定。您最好的选择是使用我们的CodingHorror:

代码语言:javascript
复制
new CodingHorror("UPDATE Tags SET Popularity = Popularity + 1 WHERE @1", 
  tagId).Execute();
票数 1
EN

Stack Overflow用户

发布于 2011-01-11 01:13:51

如果这能行得通,我会很惊讶。当我需要将一个字符串作为SQL的一部分(而不是通过SubSonic)进行计算时,我几乎总是不得不使用CodingHorror

但是,您应该能够通过使用单独的查询来执行此操作。类似于:

代码语言:javascript
复制
Db.Update<Tag>()
  .Set("Popularity")
  .EqualTo(Tag.SingleOrDefault(t => t.TagId == tagId).Popularity + 1)
  .Where<Tag>(x => x.TagId == tagId)
  .Execute();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4645906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档