2010-03-05 9 views
6

निबर्ननेट एचक्यूएल में 'इन' क्लॉज के लिए आप चीजों की एक सूची कैसे पास करते हैं?HqlBasedQuery का उपयोग कर खंड में एक एचक्यूएल को पैरामीटरेट करना?

उदा

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

कि सिर्फ बदसूरत है और मैं यह बदसूरत और कम नहीं के रूप में के रूप में मैं कर सकते हैं बनाने के लिए कोशिश की है। अगर किसी को इसे पूरा करने का अच्छा तरीका है तो कृपया मुझे बताएं।

इसके अलावा मैं देख रहा हूँ जेफ कैसे एसक्यूएल पर यह करने के लिए के बारे में इसी तरह के सवाल पूछा: Parameterize an SQL IN clause यह मूलतः एक ही सवाल मैं सिर्फ जानना चाहता है कि यह कैसे HQL से क्या करना चाहते है। यही कारण है कि मैं खिताब इतना समान बना रहा हूं।

+0

ICriteria अच्छी तरह से इस के लिए अनुकूल है। प्रतिबंध देखें।() – dotjoe

उत्तर

8

SetParameterList() का उपयोग करें।

Code snippet from 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(); 
+0

धन्यवाद! यही वही है जो मैं ढूंढ रहा था। –

+0

+1 यह सही तरीका है और यह अपेक्षा के अनुसार काम करता है। – Jaguar

+0

आपके पास एक टूटी हुई लिंक है –