2009-08-13 8 views
5

मेरे पास 2 टेबल हैं जिनके पास एक दूसरे के लिए एक संबंध जहाज हैमैं इसे एंटिटी फ्रेमवर्क में कैसे कर सकता हूं (एकाधिक कहां है या शामिल हों)?

तालिका ए में तालिका बी के साथ कई संबंध हैं, इसलिए यह प्रत्येक में एक नेविगेशन प्रॉपर्टी बनाता है।

अब मुझे तालिका ए (उपयोगकर्ता नाम) से एक मूल्य की जांच करने की आवश्यकता है और मुझे तालिका बी (ClubId) से एक मूल्य की जांच करने की आवश्यकता है।

तो मेरे मन में यह कुछ की तरह

Join the tables together 
Where A.userName == "bob" && 
where B.clubId == "Car" 

// return the count. 

होगा लेकिन अब मैं इकाई सामान के साथ पता है तो मैं अगर मैं एक में शामिल होने के तो साथ यह कर सकते हैं सोच रहा हूँ यह मिलती है कम आम बनाना चाहिए।

मैं इस

int count = Entity.TableA.where(a => a.userName == "bob" && a.TableB.where(i => i.ClubId == "Car")).Count(); 

की कोशिश की तो यह काम नहीं करता है, क्योंकि यह सही प्रकार नहीं लौटेगा (2 जहां)। यह ठीक है कि मैंने लाइनों के साथ कैसे सोचा कि मैं इसे कैसे करने की उम्मीद करूंगा, काम करेगा।

तो यह कैसा दिखना चाहिए?

पी.एस

मैं नहीं बल्कि एक उदाहरण Linq विधि प्रश्नों में किया है जैसे मैं ऊपर था। तुम दोनों उपयोगकर्ता और क्लब के तत्वों वापसी चाहते हैं पर क्वेरी के अंदर मिलती है एक नजर है, तो

var usersNamedBobInCarClub = 
      from A in User 
      from B in A.Clubs 
      where A.userName == "bob" && 
        B.clubId == "Car" 
      select A; 

:

उत्तर

4

छनन TableA अपने में शामिल होने से पहले शायद और अधिक कुशल है:

var clubs = from a in Entity.TableA 
      where a.userName == "bob" 
      from b in a.TableB 
      where b.clubId == "Car" 
      select b; 

var count = clubs.Count(); 

आप दो चर का उपयोग करने की जरूरत नहीं है, यह स्पष्टता के लिए यहाँ सिर्फ मेरी प्राथमिकता है।

या विधि वाक्य रचना में आप थोड़ा आसान बनाने में कर सकते हैं:

var count = Entity.TableA.Where(a => a.userName == "bob") 
         .SelectMany(a => a.TableB) 
         .Count(b => b.clubId == "Car"); 

हालांकि, मैं नहीं कुछ एफई उन विशेष भाव समझता हूँ। यदि नहीं, तो कंपाइलर उपर्युक्त क्वेरी का अनुवाद इस प्रकार करेगा:

var count = Entity.TableA.Where(a => a.userName == "bob") 
         .SelectMany(a => a.TableB, (a,b) => new { a, b }) 
         .Where(x => x.b.clubId == "Car") 
         .Count(); 
+0

आह। वाह। मुझे यकीन नहीं है कि मैं अपने मामले में बेहतर क्या पसंद करता हूं। वह चुनने से मुझे बहुत फेंकता है। तो अगर मुझे एक और फिल्टर चाहिए तो क्या होगा? क्या मैं एक और चयन जोड़ूंगा? वैसे पहला तरीका वाक्यविन्यास काम करता है मुझे नहीं पता कि यह आंतरिक रूप से नीचे जाता है और दूसरी बात करता है। सभी प्रश्न एक ही निष्पादन समय लेते हैं। दूसरे में क्या है चुनें कोई भी करता है। जैसे => a.TableB, (ए, बी) =>) क्या है? – chobo2

+0

मैंने क्वेरी अनुवाद में एक फिक्स के साथ पोस्ट को अद्यतन किया है। पहला चयनमनी अनिवार्य रूप से आपके नेस्टेड संग्रह को "फ़्लैटेंस" करता है, जो सभी बी के सभी बी के अनुक्रम को लौटाता है। दूसरा SelectMany दो प्रतिनिधियों को स्वीकार करता है, एक ए और बी को दिए गए रिटर्न वैल्यू को निर्दिष्ट करने के लिए बी के संग्रह को पुनः प्राप्त करने के लिए "संग्रह चयनकर्ता" और "परिणाम चयनकर्ता" को स्वीकार करता है।LINQ बस आपकी शेष क्वेरी में उपयोग के लिए इनपुट ऑब्जेक्ट्स का चयन करता है। – dahlbyk

5

अपने एफई मॉडल मानते हुए कुछ इस तरह कर सकता है उपयोगकर्ता और क्लब के बीच संबंध नहीं है।

+0

मैं कोशिश करूँगा लेकिन मैं लिंक विधि प्रश्नों में ऐसा कैसे करूं? – chobo2

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