如何在一对多关系中包含来自两个表的值

本文关键字:两个 一对多 关系 包含 | 更新日期: 2023-09-27 18:13:56

我一整天都在摆弄这个东西,快把我逼疯了!

我想做什么:

我有两个表格:问题/答案

问题表包含:quesID, quesDescr答案表包含:answerID、quesID、answer

基本上,答案表是每个问题的选项。例如:

quesID | quesDescr

你最喜欢的颜色是什么?

answerID | quesID | answer

1 | 1 | Red

2 | 1 | Blue

等等……

在我的表单页面上,我想抓取问题及其所有答案选项以显示给最终用户。似乎我可以得到问题列表,但我不能得到问题和答案张贴在我的视图。

我想我会在我的模型中处理查询(linq到sql)…但这并没有给我答案:

public List<nonEEPreQue> getPreQuestions()
        {
            return fDB.nonEEPreQues.OrderBy(q => q.preQuesOrder).ToList();
        }

我在这里读到一些使用外连接的东西。我认为这可能是正确的,但我正在努力如何传递变量。我在模型中尝试了这一点,但似乎它进入了控制器(?):

var quesList = from ques in preQ.nonEEPreQues
                       join an in preQ.nonEEPreQuesAnswers
                        on ques.preQuesID equals an.preQuesID into outer
                       from an in outer.DefaultIfEmpty()
                       select new
                       {
                           QuestionTxt = ques.preQuesDescr,
                            AnswerTxt = an.answerTxt
                       };

        return View(quesList);

那么-以上是正确的吗?在我的视图中,我该如何访问问题和答案(我假设在foreach循环中)?

任何帮助都非常感谢!

如何在一对多关系中包含来自两个表的值

既然您已经在使用Linq to SQL并且使用匿名类型,那么请保持简单并以关系方式选择您需要的内容。

var quesList = from ques in preQ.nonEEPreQues
               select new
               {
                   QuestionID = ques.preQuesID,
                   QuestionTxt = ques.preQuesDescr,
                   Answers = (from  an in preQ.nonEEPreQuesAnswers
                              where an.preQuesID == ques.preQuesID
                              select an)
               };

这将为您提供一个对象,该对象具有问题的QuestionTxt和QuestionID,以及直接附加到问题的nonEEPreQuesAnswer对象的集合。这将使枚举它们更容易,并且应该是可绑定的(如果你正在做一个gridview或repeater)。

在您的getPreQuestions()中,您应该查询答案并使用Include()包含问题。

这将检索一个带有Questions…属性的答案列表。然后将该列表传递给视图。