Я сделал объект POCO сопоставленным с базой данных следующим образом:
class MoneyObject
{
Money MoneyAmmount { get;set; }
string Description { get;set; }
}
MoneyAmmount - это тип Money, который является производным от ICompositeUserType и имеет 2 свойства: десятичная сумма и строка CurrencyCode:
class Money
{
decimal Ammount { get;set; }
string CurrencyCode { get;set; }
}
Проблема возникает, когда я пытаюсь получить данные из базы данных, используя критерии, подобные следующим:
var criteria = session.CreateCriteria(typeof(MoneyObject))
.Add(Expression.Lt("MoneyAmmount", money));
Генерирует следующий SQL-запрос:
SELECT this_.Id as Id2_0_, this_.Value as Value2_0_, this_.Currency as Currency2_0_, this_.Description as Descript4_2_0_
FROM MoneyObject this_
WHERE this_.Value < @p0 and this_.Currency < @p1;@p0 = 300,01, @p1 = 'USD'
Я не хочу сравнивать мой объект valuetype Money, используя CurrecyCode по символам. Я хочу сравнивать деньги только по количеству объектов и получать данные, используя критерии. Но дело в критериях только со свойствами объекта POCO. Значит я знаю, что сравнение работает:
Expression.Lt("MoneyAmmount.Ammount", money.Ammount)
Я хочу избежать сравнения по свойствам объекта типа оценки и выполнять сравнение только между объектами типа оценки, например
Expression.Lt("MoneyAmmount", money)
Кто-нибудь знает, как изменить такое поведение сравнения?