Paramétrer une clause HQL IN en utilisant HqlBasedQuery?

Comment passez-vous une liste d’éléments pour la clause ‘in’ dans Nhibernate HQL?

par exemple

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

Maintenant, ça ne va pas marcher, autant que je le souhaite! Suis-je vraiment coincé à faire quelque chose comme ça:

 // data input from the user interface, not known at comstack time object[] productIds = {1, 17, 36, ... }; ssortingng hqlQuery = @" from Product as prod where prod.Id in ( {0} )"; // build ssortingng array of the right number of '?' characters ssortingng[] paramSsortingngArray = new Ssortingng('?', productIds.Length).ToCharArray().Select(item => item.ToSsortingng()).ToArray(); // join to make '?, ?, ?, ?, ?' ssortingng parameterSsortingng = ssortingng.Join(", ", paramSsortingngArray); hqlQuery = ssortingng.Format(hqlQuery , parameterSsortingng); HqlBasedQuery query = new HqlBasedQuery(typeof(Product), hqlQuery, productIds) ActiveRecordMediator.ExecuteQuery(query); 

C’est juste moche et j’ai essayé de le rendre aussi moche et court que possible. Si quelqu’un a un bon moyen d’accomplir cela, s’il vous plaît faites le moi savoir.

Je vois aussi que Jeff a posé une question similaire sur la procédure à suivre pour SQL: Paramétrer une clause SQL IN Il s’agit essentiellement de la même question que je souhaite savoir comment procéder à partir de HQL. C’est pourquoi je fais les titres si similaires.

Utilisez SetParameterList() .

Extrait de code de billsternberger.net:

 ArrayList stateslist = new ArrayList(); stateslist.Add("TX"); stateslist.Add("VA"); ssortingng hql = Ssortingng.Format("FROM Contact c where State in (:states)"); SimpleQuery q = new SimpleQuery(hql); q.SetParameterList("states", stateslist); Contact[] result = q.Execute();