2015-11-17 5 views
5

मेरे पास यह डेटाबेस पहले ईएफ कोड से है, और अब मुझे अपना डेटा प्राप्त करने में मुश्किल हो रही है।एएसपी.NET linq एकाधिक जुड़ने के साथ चयन करें

कार्यक्रम: एक कसरत कार्यक्रम है कि व्यायाम होता है

मैं निम्नलिखित संस्थाओं है।

कसरत: एक दिन की दिनचर्या है कि समूह की एक सूची है है।

सेट करें: एक व्यायाम वाई लोड के साथ दो बार बार-बार किया जाता है।

व्यायाम: एक जिम व्यायाम है जिसमें एक क्षेत्र है।

क्षेत्र: मानव शरीर पर एक क्षेत्र है और मांसपेशियों में शामिल है।

मांसपेशियों: मानव शरीर पर एक मांसपेशी है।

मॉडल उदाहरण

यहाँ 3 मॉडल उदाहरण

public class Workout 
{ 
    [Key] 
    public int WorkoutId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<Set> Sets { get; set; } 
} 
public class Set 
{ 
    [Key] 
    public int SetId { get; set; } 
    //Foreign key for Exercise 
    public int ExerciseId { get; set; } 
    [ForeignKey("ExerciseId")] 
    public Exercise Exercise { get; set; } 
    public decimal Load { get; set; } 
    public decimal Order { get; set; } 
} 

    public class Exercise 
{ 
    [Key] 
    public int ExerciseId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    //Foreign key for Region 
    public int RegionId { get; set; } 
    public Region Region { get; set; } 
} 

और scaffolded नियंत्रक अपने ICollection सेट के साथ

// GET: api/Workouts 
    public IQueryable<Workout> GetWorkouts() 
    {   
     return db.Workouts; 
    } 

तो यह है कि केवल मुझे एक कसरत वस्तु देता रिक्त है कर रहे हैं।

// GET: api/Workouts 
    public IQueryable<Workout> GetWorkouts() 
    {   
     return db.Workouts.Include(w => w.Sets); 
    } 

सेट्स सहित मैं संबंधित समूह प्राप्त कर सकता हूं।

लेकिन अगर मैं एक कसरत प्राप्त करना चाहता हूं, जिसमें सेट्स शामिल हैं, और उन सेटों में व्यायाम शामिल होंगे, और उन अभ्यासों में क्षेत्र शामिल होंगे जो अंत में मांसपेशियों की एक सूची थी?

और क्या अगर मैं आईडी से एक कसरत, इस तरह हैं:

 [ResponseType(typeof(Workout))] 
    public IHttpActionResult GetWorkout(int id) 
    { 
     Workout workout = db.Workouts.Find(id); 
     if (workout == null) 
     { 
      return NotFound(); 
     } 

     return Ok(workout); 
    } 

कैसे मैं तो शामिल होंगे सेट?

संपादित और दृश्य स्टूडियो खाका/सहायता पृष्ठ से, मैं निम्नलिखित देख सकते हैं:

GET api/Workouts/{id} 

साथ मेड प्रदान करना चाहिए:

{ 
    "workoutId": 1, 
    "name": "sample string 2", 
    "description": "sample string 3", 
    "sets": [ 
    { 
    "setId": 1, 
    "exercise": { 
    "exerciseId": 1, 
    "name": "sample string 2", 
    "description": "sample string 3", 
    "regionId": 4, 
    "region": { 
    "regionId": 1, 
    "regionName": "sample string 2", 
    "muscles": [ 
     { 
      "muscleId": 1, 
      "latinName": "sample string 2", 
      "dkName": "sample string 3", 
      "enName": "sample string 4", 
      "description": "sample string 5" 
     }, 
     { 
      "muscleId": 1, 
      "latinName": "sample string 2", 
      "dkName": "sample string 3", 
      "enName": "sample string 4", 
      "description": "sample string 5" 
     } 
     ] 
    } 
    }, 

लेकिन यह सिर्फ अभ्यस्त हो, im जेएसओएन में मुझे एक पूर्ण कार्यक्रम देता है जो कुछ भी के लिए खुला है। स्काइप, teamwievr, ढेर, एक और समाधान, anyhting।

+0

आप को देखा है [इस] (https://msdn.microsoft.com/en-us/data/jj574232.aspx#eagerLevels)? – user1429080

+0

क्या आपके पास 'वर्कऑट' में 'SetId' नहीं होना चाहिए? – Mairaj

+0

मुझे ऐसा नहीं लगता है कि –

उत्तर

3

और अंत में मैं यह मिल गया:

public class Exercise 
{ 
    [Key] 
    public int ExerciseId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    //Foreign key for Region 
    //public int RegionId { get; set; } 
    public virtual Region Region { get; set; } //had to be virtual -.- 
} 
+0

आपकी परीक्षा के साथ अच्छा, शुभकामनाएँ :) –

+0

अरे, खुशी है कि आप इसे काम कर रहे हैं। बर्फबारी की वजह से पहले आप वापस नहीं आ सके, बिजली खो दी और 2 दिनों के लिए सभी कनेक्शन। – Sami

2

यदि आपके पास मॉडल सही तरीके से सेट हैं, तो Include() विधियों को चेन करना चाहिए।

public IQueryable<Workout> GetWorkouts() 
{   
    return db.Workouts.Include(w => w.Sets.AsQueryable().Include(s => s.Excercises.AsQueryable().Include(e => e.Regions.AsQueryable().Include(r => r.Muscles)))); 
} 
+0

नहीं है, एस एक कसरत है, न कि सेट करें, क्योंकि समूह एक संग्रह है, लेकिन प्रत्येक सेट में 1 व्यायाम होता है। तो मुझे वहां एक फोरच फेंकना है या? –

+0

क्या आप उस संग्रह का संक्षिप्त उदाहरण बना सकते हैं, जिस पर आप क्वेरी को वापस आने की उम्मीद करते हैं? मैंने संरचना को थोड़ा सा गलत समझा .. – Sami

+0

मैंने कोशिश की, उम्मीद है कि यह –

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