2011-02-22 13 views
17

मैं कुछ कोड को निबर्ननेट 2.x से 3.0 में परिवर्तित कर रहा हूं। इससे पहले, मैं LINQ समर्थन प्राप्त करने के लिए LINQ प्लगइन का उपयोग कर रहा था। मेरी समझ यह थी कि 3.0 में इसे प्रथम श्रेणी की सुविधा के रूप में घुमाया गया था। तो मेरे सवाल है, मैं इस किया करते थे:निबर्ननेट 3 और LINQ

return new List<T>(session.Linq<T>().Where(where)); 

क्या है कि नए वाक्य रचना के साथ कैसा दिखता है? मैं nhib 3 दस्तावेज़ों और ट्यूटोरियल के माध्यम से चला गया और linq सामान के बारे में कुछ भी नहीं देखा, तो मुझे पैटर्न के बाद एक उदाहरण नहीं मिला।

+1

'रिटर्न सत्र क्यों नहीं लिख रहे हैं। लिंक्स ()। जहां (कहाँ) .TOList()' बजाय? –

+0

हाँ, तय है कि। पुराना कोड –

उत्तर

33

Linq साथ NHibernate 3 में आप ऐसा करते हैं:

from u in session.Query<User>() 
where u.Username == username 
select u 

या

session.Query<User>().Where(u => u.Username == username) 

यदि यह आपके लिए क्या देख रहे हैं सुनिश्चित नहीं हैं।

संपादित करें: Query<T> एक विस्तार विधि है। इसका उपयोग करने में सक्षम होने के लिए using NHibernate.Linq जोड़ने के लिए मत भूलना।

+2

मुझे कोई सत्र नहीं दिख रहा है .Query मेरे सत्र ऑब्जेक्ट पर। क्या मैं एक प्रयोग या कुछ याद कर रहा हूँ? –

+5

NHibernate.Linq ने किया था। :) –

3

कोई नया वाक्यविन्यास नहीं है। लिंक अभी भी linq है। पुराने प्रदाता में लिंक नामक विधि को नए में क्वेरी नाम दिया गया है।

नई सूची (गणना करने योग्य) के बजाय आप अलग-अलग एसक्यूएल क्वेरी के साथ सूची में प्रत्येक ऑब्जेक्ट को लोड करने से रोकने के लिए enumerable.ToList() का उपयोग कर सकते हैं।

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