我根本不熟悉postGreSQL,但希望這可能接近你所需要的。
var results = session.CreateCriteria<Reword>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("reword"), "reword")
.Add(Projections.Property("faq"), "faq")
)
.Add(Restrictions.Eq("reword","2"))
.Add(Restrictions.Eq("faq","SOME_FAQ"))
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(ReWordDTO)))
.List<ReWordDTO>();
然後,如果需要,您可以將來自DTO的列輸出代碼以進行輸出。您可能需要添加一些OR條件才能使其在Criteria中工作。
應該產生這樣的SQL:
select Reword, Reword_faq
from me_review_entries
where reword=2
and reword_faq='SOME_FAQ'
它類似於原來的查詢,可能是接近你在找什麼。我不確定你需要連接你的where子句中的列,因爲你已經分開了值。
您的原始:
SELECT ('reword#' || reword) || reword_faq as foo FROM me_review_entries re
WHERE ('reword#' || reword) || reword_faq = 'reword#2#SOME_FAQ'
難道被改寫爲?:
SELECT (reword || reword_faq) as foo
FROM me_review_entries re
WHERE (reword || reword_faq) = '2#SOME_FAQ'
這可以被重新寫爲?:
SELECT (reword || reword_faq) as foo
FROM me_review_entries re
WHERE reword=2 and reword_faq='#SOME_FAQ'
雖然數據在列中可能意味着它需要按照您描述的方式進行書寫。如果情況確實如此,您可以在條件查詢中添加一些OR條件以使其工作。
另一種選擇是註冊一個CustomSQLFunction。
RegisterFunction("concat",
new SQLFunctionTemplate(NHibernateUtil.String, "(?1 || ?2)"));
Registering Custom SQL Functions in NHibernate
var results = session.CreateQuery("select concat(reword,rewordfaq)
from Reword
where concat(reword,rewordfaq)='2#SOME_FAQ'
").List();
||是有效的SQL? – Peter
我在postGreSQL中將它用於連接字符串 –
對不起,但我認爲你在這裏遇到了原生的'
Rippo