Могу ли я использовать функции SQL в NHibernate QueryOver?
Я искал в интернете и не могу найти пример того, как использовать запрос в nhibernate 3.0. Например, я хотел бы использовать строковые функции в предложении where в запросе ex:
var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault();
Но это не работает, потому что nhibernate не может понять ToLower, так как же можно расширить диалект таким образом, чтобы это стало возможным?
2 ответа
Решение
session.QueryOver<Foo>()
.Where(Restrictions.Eq(
Projections.SqlFunction("lower", NHibernateUtil.String,
Projections.Property<Foo>(x => x.Name)),
name.ToLower()))
должен получить вам SQL как where lower(Name) = @p0
Я считаю, что это работает по крайней мере в сборке, которую я использую (версия 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();
Дайте ему шанс и дайте мне знать, если это работает для вас...