Nhibernate HQL'deki 'in' cümleciğine ilişkin bir şeyler listesini nasıl iletirsiniz?HqlBasedQuery kullanarak HQL IN yan tümcesini parametrelendirme?
örn.
// 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);
Şimdi, bu işe yaramıyor, istediğim kadar işe yaramıyor! Gerçekten böyle bir şey yaptığını şaşırıp:
// 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);
sadece çirkindir ve elimden geldiğince o kadar çirkin ve kısa değil yapmaya çalıştık. Bunu gerçekleştirmenin iyi bir yolu varsa lütfen bana bildirin.
Ayrıca Jeff'in SQL'de nasıl yapılacağıyla ilgili benzer sorular sorduğunu da görüyorum: Parameterize an SQL IN clause Bu temelde aynı soruyu HQL'den nasıl yapacağımı bilmek istiyorum. Bu yüzden başlıkları çok benzer yapıyorum.
ICriteria bunun için de çok uygundur. Restrictions.In() – dotjoe