我对 Linq to NHibernate (C#) 中的总和有疑问。我无法得到任何总数的小数部分。我要在业务对象中求和的字段是 C# 十进制,而数据库中的映射字段是 DECIMAL(8,2)
总和不会引发任何异常,但我只得到一个整数(我在数据库中使用 SQL 检查,总和确实有小数)。
我对该字段的流利映射是:
Map(x => x.Importe).Column("importe").Nullable().CustomSqlType("DECIMAL(10,2)");
我尝试使用这些表达式和相应的没有演员表(十进制)的表达式,我总是得到相同的结果(对不起,我的业务对象是西班牙语,“importe”翻译为“金额”,而“vale”翻译为“凭证” =)
var total1 = (from vale in session.Query<Vale>()
select vale).Sum(c => c.Importe);
var total2 = (from vale in session.Query<Vale>()
select vale.Importe).Sum();
var total3 = (from vale in session.Query<Vale>()
select new { vale.Importe }).Sum(c => c.Importe);
并转换为十进制(和十进制?):
var total1 = (from vale in session.Query<Vale>()
select vale).Sum(c => (decimal) c.Importe);
var total2 = (from vale in session.Query<Vale>()
select (decimal) vale.Importe).Sum();
var total3 = (from vale in session.Query<Vale>()
select new { vale.Importe }).Sum(c => (decimal) c.Importe);
输出 SQL 始终相同:
SELECT CAST(SUM(vale0_.importe) AS DECIMAL) AS col_0_0_ FROM vales vale0_
我认为的问题是“AS DECIMAL”,因为我发送了这个 SQL,但使用了“AS DECIMAL(8,2)”,我得到了正确的结果,但我不知道如何让 NHibernate 生成正确的 SQL。
我尝试将 .CustomSqlType("DECIMAL(10,2)") 附加到映射字段,和/或在映射中使用 .Precision(8).Scale(2) ,但没有。
我将 FluentNHibernate 与 NHibernate 3.2.0.4000 和 MySQL 5.5.19 一起使用