Comment passez-vous une liste de choses pour la clause 'in' dans Nhibernate HQL?Paramétrage d'une clause HQL IN à l'aide de HqlBasedQuery?
par exemple.
// 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);
Maintenant, cela ne va pas fonctionner, autant que je le souhaite! Suis-je vraiment coincé en train de faire quelque chose comme ceci:
// 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 ({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), hqlQuery, productIds)
ActiveRecordMediator.ExecuteQuery(query);
C'est juste laid et j'ai essayé de le rendre aussi laid et pas court que je peux. Si quelqu'un a un bon moyen d'accomplir cela, faites le moi savoir.
Aussi, je vois Jeff a posé des questions similaires sur la façon de faire cela sur SQL: Parameterize an SQL IN clause C'est fondamentalement la même question que je veux juste savoir comment le faire à partir de HQL. C'est pourquoi je rends les titres si similaires.
ICriteria est bien adapté pour cela. voir Restrictions.In() – dotjoe