开发者

How to build string query with NHibernate?

I would like to reproduce this query with NHibernate using projection

SELECT ('reword#' || reword) || reword_faq as foo FROM me_review_entries re
WHERE ('reword#' || reword) || reword_faq = 'reword#2#SOME_FAQ'

I did

Session.CreateCriteria<Reword>

But then I don't know I could do pr开发者_StackOverflow社区ojection to build the string ('reword#' || reword) || reword_faq

Any Idea ?


I am not familiar with postGreSQL at all but hopefully this might be close to what you need.

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>();

You can then concat the columns from the DTO in code for output if needed. You might need to add some OR conditions to make it work in Criteria.

Should produce SQL like this:

select Reword, Reword_faq
from me_review_entries
where reword=2
and reword_faq='SOME_FAQ'

Which is similar to your original query and might be close to what you are looking for. I'm not sure you need to concat the columns in your where clause seeing as you have the values separately already.

Your original:

SELECT ('reword#' || reword) || reword_faq as foo FROM me_review_entries re
WHERE ('reword#' || reword) || reword_faq = 'reword#2#SOME_FAQ'

Could it be re-written as?:

SELECT (reword || reword_faq) as foo 
FROM me_review_entries re
WHERE  (reword || reword_faq) = '2#SOME_FAQ'

Which could then be re-written as?:

SELECT (reword || reword_faq) as foo 
FROM me_review_entries re
WHERE  reword=2 and reword_faq='#SOME_FAQ'

Although the data in the columns might mean it needs to be written the way you describe. You could add some OR conditions into the criteria query to make it work if that is the case.

Another option would be to register a 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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜