我已经将POCO对象映射到数据库,如下所示:
class MoneyObject
{
Money MoneyAmmount { get;set; }
string Description { get;set; }
}
MoneyAmmount - 是类型Money,它是从ICompositeUserType派生而来,有2个属性decimal Amount和string 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。我想仅使用amount属性比较Money,并使用条件获取数据。但仅使用POCO对象的属性处理标准。意思是我知道比较有效:
Expression.Lt("MoneyAmmount.Ammount", money.Ammount)
我希望避免使用valuetype对象属性进行比较,并仅在值类型对象(如
)之间进行比较Expression.Lt("MoneyAmmount", money)
有人知道如何改变这种比较行为吗?
答案 0 :(得分:2)
尝试这样的事情
var criteria = session.CreateCriteria(typeof(MoneyObject), "m")
.CreateAlias("m.MoneyAmmount", "a")
.Add(Expression.Lt("a.Ammount", money));
创建别名“m”和“a”可以与嵌套属性进行比较。