निष्पादित करता है मैं दृढ़ता से टाइप किए गए वर्गों के लिए LINQ से SQL परिणामों का प्रक्षेपण कर रहा हूं: माता-पिता और बच्चे। इन दो प्रश्नों के प्रदर्शन के बीच अंतर बड़ा है:एक से कई प्रोजेक्ट LINQ क्वेरी बार-बार
धीरे क्वेरी - DataContext से प्रवेश करने से पता चलता है कि डाटाबेस के लिए एक अलग कॉल हर माता-पिता के लिए बनाया जा रहा है
var q = from p in parenttable
select new Parent()
{
id = p.id,
Children = (from c in childtable
where c.parentid = p.id
select c).ToList()
}
return q.ToList() //SLOW
फास्ट क्वेरी - DataContext शो से प्रवेश करने एक एकल डाटाबेस हिट क्वेरी कि सभी आवश्यक डेटा
var q = from p in parenttable
select new Parent()
{
id = p.id,
Children = from c in childtable
where c.parentid = p.id
select c
}
return q.ToList() //FAST
मैं दूसरे उदाहरण के एकल क्वेरी शैली का उपयोग करने के लिए मजबूर LINQ, लेकिन उनके बच्चों के साथ माता पिता वर्गों को भरने के लिए चाहते हैं देता है सीधे वस्तुओं। अन्यथा, बच्चों की संपत्ति IQuerierable<Child>
है जिसे चाइल्ड ऑब्जेक्ट का पर्दाफाश करने के लिए पूछताछ की जानी चाहिए।
संदर्भित प्रश्न मेरी स्थिति को हल करने के लिए प्रकट नहीं होते हैं। db.LoadOptions का उपयोग कर काम नहीं करता है। शायद इसे डेटाकॉन्टेक्स्ट के साथ पंजीकृत एक TENTITY होने की आवश्यकता है।
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Parent>(p => p.Children);
db.LoadOptions = options;
कृपया ध्यान दें: जनक एवं बाल सरल प्रकार, नहीं Table<TEntity>
प्रकार हैं। और माता-पिता और बच्चे के बीच कोई प्रासंगिक संबंध नहीं है। subqueries विज्ञापन हैं।
जारी करने की क्रक्स: 2 LINQ उदाहरण में मैं IQueriable
बयान को लागू करने और ToList()
फ़ंक्शन को कॉल नहीं करते हैं और किसी कारण से LINQ जानता है कि कैसे एक ही क्वेरी कि सभी आवश्यक डेटा प्राप्त कर सकते हैं उत्पन्न करने के लिए। मैं पहली क्वेरी में पूरा किए गए वास्तविक डेटा के साथ अपने विज्ञापन-प्रसार प्रक्षेपण को कैसे पॉप्युलेट करूं? इसके अलावा, अगर कोई मेरे प्रश्न को बेहतर-वाक्यांश में मदद कर सकता है, तो मैं इसकी सराहना करता हूं।
'चाइल्ड' एक "सरल प्रकार" कैसे हो सकता है? यह एक मैप प्रकार होना चाहिए। और 'parenttable'' table' है या पिछले linq क्वेरी का परिणाम है? कुछ linq बयान एल 2 एस एन + 1 में शामिल होने से स्विच करने के लिए कारण हो सकता है। –
डुप्लिकेट मार्कर: क्या आप इकाई ढांचे और linq के बीच एसक्यूएल के बीच अंतर जानते हैं? –
@GertArnold जबकि ईएफ/एल 2 एस के LINQ भाग अक्सर समान प्रश्नों को कार्यात्मक रूप से डुप्लिकेट करते हैं, * इस * मामले में मेरा मानना है कि आप पूरी तरह से सही हैं; वे डुप्लिकेट नहीं हैं। पुन: खोलने से। –