2011-01-03 6 views
6

मैं वर्तमान में एक ईएफ 4 डेटा भंडार पर विस्तार विधियों का उपयोग करने के लिए प्रतिबंधित हूं; मैं linq का उपयोग ईएफ में नहीं कर सकता। मैं एक साधारण 3 टेबल काम में शामिल होने की कोशिश कर रहा हूं। यहाँ कोड है:इस ईएफ में क्या बात है विधि कॉल में शामिल हों?

var query = _readOnlyRepository.All<Parent>() 
      .Where(p => p.Something == "something") 
      .Join(_readOnlyRepository.All<Child>(), // Child entity 
       p => p.ParentID,      // Parent Key 
       c => c.ChildId,      // Child Key 
       (p, c) => c)      // Projection 
      .Join(_readOnlyRepository.All<GrandChild>(), 
       c => m.ChildID, 
       g => g.GrandChildID, 
       (c, g) => g) 
      .Select(joined => joined.Child.Whatever); 

यहाँ (अनिवार्य रूप से) उत्पन्न एसक्यूएल है:

select c2.Whatever 
from Parent p 
inner join Child c on p.ParentId = c.ParentId 
inner join GrandChild g on c.ChildId = g.ChildId 
left outer join Child c2 on g.ChildId = c2.ChildId 
where ("something" = p.Something) 

मैं कोड में क्या बदल सकते हैं कि बाएं बाहरी कि क्वेरी के इरादे को अमान्य कर में शामिल होने को खत्म करने के लिए?

उत्तर

2

मैं बिल्कुल स्पष्ट नहीं हूं कि आप क्या लौटने का प्रयास कर रहे हैं - ग्रैंड चाइल्ड की जो भी संपत्ति? आपकी दूसरी में शामिल होने के रिटर्न पोता वस्तु (c, g) => g तो मैं तुम सिर्फ

.Select(joined => joined.Whatever); 

आवश्यकता होगी क्योंकि यहां joined पोता वस्तु है लगता है।

+0

ठीक है, जैसा कि मैंने इसे समझ लिया है, "शामिल" माता-पिता के साथ जुड़ने वाले बच्चों के साथ है; कहां() के माध्यम से फ़िल्टर करने के बाद सभी() को पहली कॉल का नतीजा। यही कारण है कि मैं शामिल हो गया हूँ.बच्चे.जो भी हो। Intellisense सहमत हैं; इसमें ग्रैंड चाइल्ड गुण नहीं हैं, माता-पिता गुण हैं। – dudeNumber4

+0

मैं सोच रहा था कि अंतिम परिणाम मूल वस्तु थी, न कि आखिरी जुड़ाव का नतीजा। मैं शामिल हो रहा था। चाइल्ड सोच मैं माता-पिता जा रहा था -> बच्चा, लेकिन वह संपत्ति वास्तव में विपरीत थी: पोती -> बच्चा। बच्चे को पोते नहीं लौटने के लिए फिक्स को बदलना था (सी, जी) => जी से (सी, जी) => सी। – dudeNumber4

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