0

次のクラスがあります。

public partial class Topic
{
    public Topic()
    {
        this.SubTopics = new List<SubTopic>();
    }
    public int TopicId { get; set; }
    public string Name { get; set; }
    public int SubjectId { get; set; }
    public virtual Subject Subject { get; set; }
    public virtual ICollection<SubTopic> SubTopics { get; set; }
}
public partial class SubTopic
{    
    public SubTopic()
    {
        this.Problems = new List<Problem>();
    }
    public int SubTopicId { get; set; }
    public int TopicId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Problem> Problems { get; set; }
    public virtual Topic Topic { get; set; }

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

LINQ 式を作成する方法を教えてください。私がする必要があるのは、SubjectId = 0 を持つ質問の QuestionId だけを取得することです。

ProblemId が指定された場所で質問を取得するために作成した LINQ を次に示します。

var questions = _questionsRepository
        .GetAll()
        .Where(a => a.ProblemId == problemId)
        .ToList();

このため、LINQ式を上記のすべてのテーブルに結合させて、SubjectId = 0;を入力できるようにする方法を教えてください。

4

1 に答える 1

3

必要なすべてのナビゲーション プロパティがあるので、次の操作を行うだけです。

var questions = _questionsRepository.GetAll()
.Where(m => m.Problem.SubTopic.Topic.SubjectId == 0)
.Select(m => m.QuestionId);

nullチェックが必要な場合があります

.Where(m => m.Problem != null && 
            m.Problem.SubTopic ! null && 
            m.Problem.SubTopic.Topic != null &&
            m.Problem.SubTopic.Topic.SubjectId == 0)
.Select(m => m.QuestionId);
于 2013-09-02T14:35:39.640 に答える