2013-08-17 14 views
5

Aşağıdaki sınıfları: Nasıl yapabilirim LINQ'da birden fazla seviyeye inebilirim?

 var problems = _problemsRepository.GetAll() 
      .Where(p => p.ProblemId == problemId) 
      .Include(p => p.Questions) 
      .Include(p => p.Questions.Answers) 
      .ToList(); 
     return problems; 

Yani Sorunu, Soru görmek ve bilgi Yanıt edebilirsiniz:

public class Problem : AuditableTable 
{ 
    public Problem() 
    { 
     this.Questions = new List<Question>(); 
    } 
    public int ProblemId { get; set; } 
    public string Title { get; set; } 
    public virtual ICollection<Question> Questions { get; set; } 
} 

public Question() 
    { 
     this.Answers = new List<Answer>(); 
    } 
    public int QuestionId { get; set; } 
    public int ProblemId { get; set; } 
    public virtual ICollection<Answer> Answers { get; set; } 
    public virtual Problem Problem { get; set; } 
} 
public class Answer : AuditableTable 
{ 
    public int AnswerId { get; set; } 
    public int QuestionId { get; set; } 
    public string Text { get; set; } 
    public virtual Question Question { get; set; } 
} 

Böyle bir sorgu vermek istiyoruz. Ama son içeriğimle ilgili bir sorun var ve cevapları nasıl dahil edeceğimi bilemiyorum. Birisi bana bu konuda tavsiyede bulunabilir mi?

cevap

5

.Select() öğesini kullanabilirsiniz.

var problems = _problemsRepository.GetAll() 
      .Where(p => p.ProblemId == problemId) 
      .Include(p => p.Questions.Select(q => q.Answers)) 
      .ToList(); 

Şimdi yanıtlarınız dahil edilecektir.

+1

ilk 'de kapsayacak kullanılmıyor alacaktı. İkincisi de Soruları içerecektir. – user2674389

+0

@ user2674389 Güncellendi! Yorum yapmak için teşekkür ederiz .. –

4

Bu, EntityFramework 7.0'de değiştirilmiştir.

yeni sözdizimi formu

var problems = _problemsRepository.GetAll() 
      .Where(p => p.ProblemId == problemId) 
      .Include(p => p.Questions) 
      .ThenInclude(q => q.Answers) 
      .ToList(); 
+0

Ah, EF 7 için bir çözüm sunmuştur. EF 7'nin tembel yüklemeyi henüz desteklemediğini ve önceki çözümlerin işe yaramadığını görmek için bunu araştırıyordum -_- – stibay

İlgili konular