Jak przekazać listę rzeczy do klauzuli "w" w Nhibernate HQL?Parametryzacja klauzuli HQL IN za pomocą HqlBasedQuery?
np.
// 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);
Teraz to nie zadziała, tak bardzo, jak bym sobie tego życzył! Ja naprawdę zatrzymany robi coś takiego:
// 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);
to po prostu brzydki i starałem się zrobić to jak nie brzydki i krótki, jak tylko mogę. Jeśli ktoś ma dobry sposób na osiągnięcie tego celu, daj mi znać.
Widzę również, że Jeff zadał podobne pytania dotyczące tego w SQL: Parameterize an SQL IN clause Jest to w zasadzie to samo pytanie, które chcę tylko wiedzieć, jak to zrobić z HQL. Właśnie dlatego robię tytuły tak podobne.
ICriteria dobrze nadaje się do tego. zobacz Restrictions.In() – dotjoe