我可以在NHibernate QueryOver中使用SQL函数吗?

时间:2011-05-11 15:43:48

标签: nhibernate queryover dialect

我一直在网上搜索,找不到如何使用nhibernate 3.0查询的示例 例如,我想在queryover的where子句中使用字符串函数 例如:

var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault();

但这不起作用,因为nhibernate无法理解ToLower,那么如何以可能的方式扩展方言?

2 个答案:

答案 0 :(得分:9)

session.QueryOver<Foo>()
    .Where(Restrictions.Eq(
        Projections.SqlFunction("lower", NHibernateUtil.String, 
            Projections.Property<Foo>(x => x.Name)),
        name.ToLower()))

应该像where lower(Name) = @p0

那样获得SQL

答案 1 :(得分:0)

我相信它至少在我使用的版本中有效(版本3.0.0.4000)...下面是我的例子......

var reasons = _session.Query<Reason>();
var myReason = (from r in reasons 
                where r.IsCritical 
                   && r.ReasonCode.ToUpper() == reasonCode.ToUpper() 
               select r).FirstOrDefault();

试一试,让我知道它是否适合你...