LinqからNHibernate(C#)への合計に問題があります。合計の小数部が取得できません。ビジネスオブジェクトで合計したいフィールドはC#10進数であり、データベースのマップされたフィールドはDECIMAL(8,2)です。
合計は例外をスローしませんが、整数のみを取得します(データベースでSQLを確認したところ、合計には小数が含まれています)。
このフィールドのFluentマッピングは次のとおりです。
Map(x => x.Importe).Column("importe").Nullable().CustomSqlType("DECIMAL(10,2)");
これらの式とそれに対応するキャストなしの式(10進数)を試してみましたが、常に同じ結果が得られます(申し訳ありませんが、私のビジネスオブジェクトはスペイン語で、「importe」は「amount」に、「vale」は「voucher」のようなものに変換されます) =)
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);
そして、10進数(および10進数?)にキャストします。
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_
このSQLを送信したので「ASDECIMAL」だと思いますが、「AS DECIMAL(8,2)」で正しい結果が得られましたが、NHibernateに正しいSQLを生成させる方法がわかりません。
マッピングフィールドに.CustomSqlType( "DECIMAL(10,2)")を追加するか、マッピングで.Precision(8).Scale(2)を使用してみましたが、何もしませんでした。
私はFluentNHibernateをNHibernate3.2.0.4000およびMySQL5.5.19で使用しています