Могу ли я использовать функции SQL в NHibernate QueryOver?

Я искал в Интернете и не могу найти пример того, как использовать запрос nhibernate 3.0 Например, я хотел бы использовать строковые функции в предложении where запроса например:

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

Но это не работает, потому что nhibernate не может понять ToLower, так как можно расширить диалект таким образом, чтобы это стало возможным?

Ответ 1

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

должен получить вам SQL как where lower(Name) = @p0

Ответ 2

Я считаю, что это работает, по крайней мере, в сборке, которую я использую (версия 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();

Сделайте снимок и сообщите мне, если он сработает для вас...