10

我一直在搜索互联网,但找不到有关如何使用 nhibernate 3.0 的 queryover 的示例例如,我想在 queryover ex 的 where 子句中使用字符串函数:

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

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

4

2 回答 2

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

应该让你喜欢 SQLwhere lower(Name) = @p0

于 2011-05-11T19:38:44.350 回答
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();

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

于 2011-05-11T16:14:00.223 回答