比较nHibernate中的ICompositeUserType对象

时间:2009-11-09 13:09:29

标签: c# nhibernate

我已经将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)

有人知道如何改变这种比较行为吗?

1 个答案:

答案 0 :(得分:2)

尝试这样的事情

var criteria = session.CreateCriteria(typeof(MoneyObject), "m")
                             .CreateAlias("m.MoneyAmmount", "a")
                             .Add(Expression.Lt("a.Ammount", money));

创建别名“m”和“a”可以与嵌套属性进行比较。