2010-03-08 14 views
11

मैं एक सरल क्वेरी सूची वापस करने की कोशिश कर रहा हूं जो एक तालिका से पूछताछ करता है और IN का उपयोग करता है। मैं इसनिबर्ननेट एचक्यूएल जहां क्वेरी

return new List<Jobs>(
    ActiveRecordMediator<Jobs>.FindAll(Expression.In("ServiceId", ids)) 
); 

का उपयोग कर काम करने के लिए प्राप्त कर सकते हैं हालांकि यह वास्तव में वास्तव में बहुत धीमी है। तो आईडी

SimpleQuery<Job> query = 
    new SimpleQuery<Job>(@"from Job as j where ? in (j.ServiceId)", ids); 

return new List<Job>(query.Execute()); 

जैसे कुछ ऐसा करना पसंद है, हालांकि मैं काम करने के लिए SimpleQuery प्राप्त नहीं कर सकता। मैं इसे कवर करने वाले किसी दस्तावेज़ को नहीं ढूंढ सकता और उम्मीद कर रहा था कि वहां से कोई मदद करने में सक्षम होगा।

धन्यवाद

उत्तर

23

NHibernate HQL प्रलेखन here पर एक नज़र डालें।

मैं आपके कोड से अनुमान लगा रहा हूं कि आप सभी नौकरियों को वापस करने के लिए एचक्यूएल क्वेरी के बाद हैं। नौकरी की सूची में सेवा आईडी।

शायद पंक्तियों के साथ कुछ,

IQuery q = s.CreateQuery("from Job as j where j.ServiceId in (:serviceIds)"); 
q.SetParameterList("serviceIds", ids); 

BTW, आप NHibernate Lambda Extensions परियोजना में सुना है? नीचे उल्लिखित पुस्तकालय का उपयोग करके आईएन क्वेरी का एक उदाहरण है। एचक्यूएल का उपयोग करने के विकल्प के रूप में देखने के लिए कुछ दिलचस्प हो सकता है।

DetachedCriteria after = 
    DetachedCriteria.For<Person>() 
     .Add(SqlExpression.In<Person>(p => p.Name, 
      new string[] { "name1", "name2", "name3" })); 
+0

उत्तर के लिए धन्यवाद। मैं आपके जवाब SimpleQuery क्वेरी = नए SimpleQuery के आधार पर अपनी क्वेरी संपादित ( @ "नौकरी से जे के रूप में जहां j.SecondName = (: नाम) और ServiceId (में: serviceIds)"); क्वेरी.SetParameter ("serviceIds", ids); क्वेरी.SetParameter ("नाम", नाम); नई सूची (क्वेरी.एक्सक्यूट()); एकमात्र मुद्दा अब आईड्स की int सरणी है जिसमें मैं गुजर रहा हूं। डेटाबेस में फ़ील्ड टाइप int है, अगर मैं किसी भी स्ट्रिंग फ़ील्ड में IN का उपयोग करता हूं तो यह ठीक काम करता है और यदि मैं एक एकल int मान पास करता हूं तो यह काम करता है । मैं एक सरणी कैसे पास कर सकता हूं? धन्यवाद – Gilbert

+2

Opps, गलत विधि कॉल q.setParameterList का उपयोग करने की कोशिश करें – Noel

+0

इसके अलावा यह आपके लिए भी उपयोगी हो सकता है http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-queryinterface – Noel

संबंधित मुद्दे