У меня проблема с суммами в Linq to NHibernate (C#). Я не могу получить десятичные части любых итогов. Поле, которое я хочу суммировать в моем бизнес-объекте, является C# decimal, а отображаемое поле в базе данных - DECIMAL (8,2)NHibernate Sum всегда округляет до целого числа
Сумма не вызывает никаких исключений, но я получаю только целое число (I проверяется с помощью SQL в базе данных, а сумма имеет десятичные числа).
Моего свободное отображения этого поле является:
Map(x => x.Importe).Column("importe").Nullable().CustomSqlType("DECIMAL(10,2)");
Я попытался с этими выражениями и соответствующих них без броска (десятичного) и я получаю всегда один и тот же результат (извини мои бизнес-объекты находятся на испанском языке, "импортирует" переводится как "количество", и "Вейл" в какой-то вроде "ваучера" =)
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
Thanks Diego! (Грейсиас Диего!) Я попробую – toledomatias