我一直在网上搜索,但找不到如何使用nhibernate 3.0的queryover的示例。 例如,我想在where子句中使用字符串函数。
var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault();
但是这样不起作用,因为NHibernate无法理解ToLower,那么如何以一种方式扩展方言,使其成为可能呢?
我一直在网上搜索,但找不到如何使用nhibernate 3.0的queryover的示例。 例如,我想在where子句中使用字符串函数。
var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault();
但是这样不起作用,因为NHibernate无法理解ToLower,那么如何以一种方式扩展方言,使其成为可能呢?
session.QueryOver<Foo>()
.Where(Restrictions.Eq(
Projections.SqlFunction("lower", NHibernateUtil.String,
Projections.Property<Foo>(x => x.Name)),
name.ToLower()))
应该得到类似于 where lower(Name) = @p0
的 SQL 语句。
我相信它至少在我使用的版本(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();
试一试,如果可以的话,请告诉我...