2013-02-10 14 views
17

एफई में पोते को शामिल करें वस्तु पदानुक्रमक्वेरी

public class Parent 
{ 
    public int Id { get; set; } 
    public virtual Child Child { get; set; } 
} 

public class Child 
{ 
    public int Id { get; set; } 
    public virtual GrandChild GrandChild { get; set; } 
} 

public class GrandChild 
{ 
    public int Id { get; set; } 
} 

और डीबी संदर्भ

public class MyContext : DbContext 
{ 
    public DbSet<Parent> Parents { get; set; } 
} 

एक बच्चों और पोते इस तरह लैम्ब्डा वाक्यविन्यास (using System.Data.Entity) का उपयोग कर शामिल कर सकते हैं को देखते हुए:

using (MyContext ctx = new MyContext()) 
{ 
    var hierarchy = 
     from p in ctx.Parents.Include(p => p.Child.GrandChild) select p; 
} 

लैम्बडा वाक्यविन्यास क्वेरी को तोड़ने से रोकता है यदि कक्षा के नाम बाद में हैं बदल दिया। हालांकि, अगर Parent एक ICollection<Child> इस बजाय की तरह है:

public class Parent 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Child> Children { get; set; } 
} 

लैम्ब्डा वाक्य रचना नहीं रह गया काम करता है। इसके बजाय, एक स्ट्रिंग सिंटैक्स का उपयोग कर सकते हैं:

var hierarchy = from p in ctx.Parents.Include("Children.GrandChild") select p; 

स्ट्रिंग ही एकमात्र विकल्प वाक्य रचना है, या वहाँ इस स्थिति में लैम्ब्डा सिंटैक्स का उपयोग करने के लिए कुछ वैकल्पिक तरीका है?

उत्तर

29

ज़रूर, तुम क्या

var hierarchy = from p in ctx.Parents 
        .Include(p => p.Children.Select(c => c.GrandChild)) 
       select p; 

MSDN, शीर्षक टिप्पणियां, पांचवें गोली देख सकते हैं।

+0

वोट दें उपयोग करना चाहिए। एमएसडीएन लिंक भी शामिल करने के लिए धन्यवाद। – granadaCoder

12

अद्यतन: आप इकाई की रूपरेखा कोर उपयोग कर रहे हैं तो निम्न सिंटैक्स

var hierarchy = from p in ctx.Parents 
        .Include(p => p.Children) 
        .ThenInclude(c => c.GrandChild) 
       select p; 
+2

नोट: मेरे मामले में, कुछ अजीब कारणों से इंटेलिजेंस मुझे "टेंक शामिल" लम्बा क्लॉज में ग्रांडचिल्ड ऑब्जेक्ट के साथ संकेत नहीं देगा, लेकिन यह एक बढ़िया मामला था जहां इंटेलिजेंस गलत था और इससे कोई फर्क नहीं पड़ता - कोड अभी भी संकलित। –

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