加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用HqlBasedQuery参数化HQL IN子句?

发布时间:2020-12-15 08:27:30 所属栏目:百科 来源:网络整理
导读:你如何传递Nhibernate HQL中’in’子句的列表? 例如 // data input from the user interface,not known at compile timeobject[] productIds = {1,17,36,... }; string hqlQuery = @" from Product as prod where prod.Id in ( ? )";HqlBasedQuery query =
你如何传递Nhibernate HQL中’in’子句的列表?

例如

// data input from the user interface,not known at compile time
object[] productIds = {1,17,36,... }; 
string hqlQuery = @"
                from Product as prod
                where prod.Id in ( ? )";
HqlBasedQuery query = new HqlBasedQuery(typeof(Product),hqlQuery,productIds)
ActiveRecordMediator.ExecuteQuery(query);

现在,这不会起作用,就像我希望的那样!我真的坚持做这样的事情:

// data input from the user interface,... }; 
string hqlQuery = @"
                from Product as prod
                where prod.Id in ( {0} )";

// build string array of the right number of '?' characters
string[] paramStringArray = new String('?',productIds.Length).ToCharArray().Select(item => item.ToString()).ToArray();
// join to make '?,?,?'
string parameterString = string.Join(",",paramStringArray);
hqlQuery = string.Format(hqlQuery,parameterString);

HqlBasedQuery query = new HqlBasedQuery(typeof(Product),productIds)
ActiveRecordMediator.ExecuteQuery(query);

那只是丑陋而且我试图让它尽可能不丑陋.如果有人有一个很好的方法来完成这个,请告诉我.

另外我看到杰夫在SQL上问了一个关于如何做到这一点的类似问题:Parameterize an SQL IN clause
这基本上是同样的问题我只想知道如何从HQL中做到这一点.这就是为什么我让这些头衔如此相似.

解决方法

使用SetParameterList().

Code snippet from billsternberger.net:

ArrayList stateslist = new ArrayList();
stateslist.Add("TX");
stateslist.Add("VA");

string hql = String.Format("FROM Contact c where State in (:states)");
SimpleQuery<Contact> q = new SimpleQuery<Contact>(hql);
q.SetParameterList("states",stateslist);

Contact[] result = q.Execute();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读