मैं वर्तमान में एक ईएफ 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)
मैं कोड में क्या बदल सकते हैं कि बाएं बाहरी कि क्वेरी के इरादे को अमान्य कर में शामिल होने को खत्म करने के लिए?
ठीक है, जैसा कि मैंने इसे समझ लिया है, "शामिल" माता-पिता के साथ जुड़ने वाले बच्चों के साथ है; कहां() के माध्यम से फ़िल्टर करने के बाद सभी() को पहली कॉल का नतीजा। यही कारण है कि मैं शामिल हो गया हूँ.बच्चे.जो भी हो। Intellisense सहमत हैं; इसमें ग्रैंड चाइल्ड गुण नहीं हैं, माता-पिता गुण हैं। – dudeNumber4
मैं सोच रहा था कि अंतिम परिणाम मूल वस्तु थी, न कि आखिरी जुड़ाव का नतीजा। मैं शामिल हो रहा था। चाइल्ड सोच मैं माता-पिता जा रहा था -> बच्चा, लेकिन वह संपत्ति वास्तव में विपरीत थी: पोती -> बच्चा। बच्चे को पोते नहीं लौटने के लिए फिक्स को बदलना था (सी, जी) => जी से (सी, जी) => सी। – dudeNumber4