Comment passer une liste de choses pour la clause 'in' dans Nhibernate HQL ?
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);
Cela ne va pas marcher, même si j'aimerais que ce soit le cas ! Suis-je vraiment coincé à faire quelque chose comme ça ?
// 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 tout simplement moche et j'ai essayé de faire en sorte que ce soit le moins moche et le plus court possible. Si quelqu'un a une bonne façon d'y parvenir, qu'il me le fasse savoir.
Je vois aussi que Jeff a posé une question similaire sur SQL : Paramétrer une clause SQL IN C'est à peu près la même question, je veux juste savoir comment le faire à partir de HQL. C'est pourquoi les titres sont si semblables.