如何在一对多关系中包含来自两个表的值
本文关键字:两个 一对多 关系 包含 | 更新日期: 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…属性的答案列表。然后将该列表传递给视图。