Могу ли я использовать функции SQL в NHibernate QueryOver? - PullRequest
10 голосов
/ 11 мая 2011

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

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

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

Ответы [ 2 ]

9 голосов
/ 11 мая 2011
session.QueryOver<Foo>()
    .Where(Restrictions.Eq(
        Projections.SqlFunction("lower", NHibernateUtil.String, 
            Projections.Property<Foo>(x => x.Name)),
        name.ToLower()))

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

0 голосов
/ 11 мая 2011

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

Дайте ему шанс и дайте мне знать, если это работает для вас ...

...