【问题标题】:Linq expression decimal cultureLinq 表达式十进制文化
【发布时间】:2009-09-24 09:01:49
【问题描述】:

我有这段代码:

fee.SingleOrDefault(f => 100.05M >= f.Rate);

在数据库中,Fee.Rate 是一个使用不变文化存储的货币字段。但是使用此选择会出错,因为我当前的文化会将“100.05”转换为“100,05”,从而导致;

An expression of non-boolean type specified in a context where a condition is expected, near ','.

最好的方法是什么?

【问题讨论】:

  • 删除我的答案,因为它没有帮助。
  • 我现在唯一能想到的: - 将当前文化切换为不变 - 执行查询 - 恢复当前文化

标签: linq subsonic3 expression culture


【解决方案1】:

我觉得这不是 LINQ 问题,而是 SubSonic 问题。快速浏览一下他们的 LINQ 解析器,看起来常量值是用 ToString() 处理的,不考虑文化(参见 SubSonic.Linq.Structure.TSqlFormatter.VisitConstant)。为此编写/贡献补丁将是理想的(允许指定文化或至少默认使用不变量),否则我认为您无法切换线程文化。

【讨论】:

    【解决方案2】:

    感谢您的回答。作为一种解决方案,我修改了 SqlServer.ttinclude 模板以在 Find 方法中切换到不变区域性。 不是一个完美的临时解决方案,我会创建一个补丁或至少将问题报告给 SubSonic。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多