1

私のMVCプロジェクトには、次のようなテーブルがあります。

  • フォーム(FormID, SectionID
  • セクション(SectionID, SectionName
  • SectionQuestion(SectionID, QuestionID
  • 質問(QuestionID, Content

フォームには複数のセクションがあり、セクションにはいくつかの質問があります。

のすべての質問を受け取ることができますFormID。しかし、モデルのセクション(質問を含む)のリストを取得したいと思います。

これは、ビューで次のようなことをしたいという意味です。

@Model IEnumerable<MedialForm.Models.Sections>

foreach (var section in Model)
{
     //Show questions
}

助けてくれませんか?:)

4

1 に答える 1

0

フォームにはセクションが 1 つしかないため、フォームのセクションのリストは表示されません。(つまり、SectionID は Form で定義され、Section では FormID ではありません)。ただし、次の Linq クエリは、指定された FormID のセクションと関連する質問を返します。

void Main()
{
    var sections = 
        new [] 
        {
            new Section { SectionID = 1, SectionName = "SectionName1" },
            new Section { SectionID = 2, SectionName = "SectionName2" }
        };

    var forms = 
        new []
        {
            new Form { FormID = 1, SectionID = 1 },
            new Form { FormID = 2, SectionID = 1 },
            new Form { FormID = 3, SectionID = 2 },
            new Form { FormID = 4, SectionID = 2 }
        };

    var questions =
        new[]
        {
            new Question { QuestionID = 1, Content = "Question1" },
            new Question { QuestionID = 2, Content = "Question2" }
        };

    var sectionQuestions =
        new[]
        {
            new SectionQuestion { SectionID = 1, QuestionID = 1 },
            new SectionQuestion { SectionID = 2, QuestionID = 1 },
            new SectionQuestion { SectionID = 2, QuestionID = 2 }
        };

    var formId = 4;

    var result = forms
        .Join(
            sections, 
            f => f.SectionID, 
            s => s.SectionID, 
            (f, s) => new { Form = f, Section = s })
        .Join(
            sectionQuestions, 
            jfs => jfs.Section.SectionID, 
            sq => sq.SectionID, 
            (jfs, sq) => new { Form = jfs.Form, Section = jfs.Section, sq.QuestionID })
        .Join(
            questions, 
            jfsq => jfsq.QuestionID, 
            q => q.QuestionID, 
            (jfsq, q) => new { Form = jfsq.Form, Section = jfsq.Section, Question = q })
        .Where(f => f.Form.FormID == formId)
        .GroupBy(f => f.Section.SectionID)
        .Select(grp => new { SectionID = grp.Key, Questions = grp.Select(g => g.Question)});

    Console.WriteLine($"For Form: {formId} the following sections with their questions were found: {String.Join(", ", result.Select(r => $"SectionID: {r.SectionID}, QuestionIDs: [{String.Join(", ", r.Questions.Select(q => q.QuestionID))}]"))}");
}

public class Form
{
    public Int32 FormID { get; set; }
    public Int32 SectionID { get; set; }
}

public class Section
{
    public Int32 SectionID { get; set; }
    public String SectionName { get; set; }
}

public class SectionQuestion
{
    public Int32 SectionID { get; set; }
    public Int32 QuestionID { get; set; }
}

public class Question
{
    public Int32 QuestionID { get; set; }
    public String Content { get; set; }
}

これにより、次の結果が返されます。

フォーム: 4 の場合、質問のある次のセクションが見つかりました: SectionID: 2、QuestionIDs: [1, 2]

于 2019-06-28T22:44:19.700 に答える