我一直在尋找互聯網,無法找到如何使用NHibernate的3.0 例如,queryover我想用在queryover 前的where子句字符串函數的例子:我可以在NHibernate QueryOver中使用SQL函數嗎?
var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault();
但是這不起作用,因爲nhibernate無法理解ToLower,所以如何以一種可能的方式擴展方言?
我一直在尋找互聯網,無法找到如何使用NHibernate的3.0 例如,queryover我想用在queryover 前的where子句字符串函數的例子:我可以在NHibernate QueryOver中使用SQL函數嗎?
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()))
應該讓你SQL LIKE 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();
給它一個鏡頭,讓我知道,如果它的工作原理你...
這導致其中一個使用UPPER()在SQLServer的功能...(這可能對性能不好條款... FYI ) – Todd
我試過這個var query = Session.GetISession()。QueryOver
有趣的...你的權利當你使用QueryOver語法時它不起作用......我的猜測是有一天會被修復......根據你的需要,你可以移動到使用查詢語法來實現這一點,它應該工作......你的代碼將會是更新如下... – Todd
嗨,謝謝你的回覆,確實有效,你不知道我搜索這個解決方案需要多長時間。謝謝 –
@Ruben Monteiro沒有問題,我發現有時你需要在使用QueryOver時混合一些標準。 – dotjoe