Параметризация HQL В использовании пункта HqlBasedQuery?

Как Вы передаете список вещей для 'в' пункте в Nhibernate HQL?

например.

// 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, 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);

Это просто ужасно, и я попытался сделать его как не ужасным и коротким, как я могу. Если у кого-либо есть хороший способ выполнить, это сообщило мне.

Также я вижу, что Jeff задал подобные вопросы о том, как сделать это на SQL: Параметризуйте SQL В пункте, Это - в основном тот же вопрос, который я просто хочу знать, как сделать это от HQL. Вот почему я делаю заголовки настолько подобными.

6
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Используйте SetParameterList().

Фрагмент кода из 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();
8
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: