我有这段代码:
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 ','.
这样做的最佳方式是什么?
答案 0 :(得分:0)
这让我感觉不那么LINQ问题和更多SubSonic问题。快速浏览一下它们的LINQ解析器,看起来常量值是用ToString()处理的,不考虑文化(参见SubSonic.Linq.Structure.TSqlFormatter.VisitConstant)。为此编写/提供补丁是理想的(要么允许指定文化,要么至少默认使用不变量),否则我认为你很难切换线程文化。
答案 1 :(得分:0)
谢谢你的回答。作为一种解决方案,我修改了SqlServer.ttinclude模板,以便在Find方法中切换到不变文化。 不是一个完美但临时的解决方案,我将创建一个补丁或至少向SubSonic报告问题。