2013-08-17 16 views
5

我有以下類別:如何在LINQ中包含多個關卡?

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; } 
} 

我要發出這樣的詢問:

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

所以我能看到問題,答問信息。但是,我的最後一個包含有一個問題,我無法弄清楚如何得到答案。

有人可以給我一些建議。

回答

5

您可以使用.Select()。

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

現在您的答案將包括在內。

+1

第一個'Include'已經過時了。第二個也將包括這些問題。 – user2674389

+0

@ user2674389更新!感謝評論.. –

4

這在EntityFramework 7.0中進行了更改。

新的語法將採取的形式

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

啊finnaly EF 7的解決方案。只是看到EF 7不支持延遲加載和以前的解決方案不工作的年齡尋找這一點-_- – stibay

相關問題