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

时间:2011-11-08 20:36:25

标签: c# linq linq-to-sql

我整天都在为这件事殴打,这让我疯狂!

我正在尝试做什么:

我有2个表:问题/答案

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

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

quesID | quesDescr

1 |你最喜欢的颜色是什么?

answerID | quesID |答案

1 | 1 |红色

2 | 1 |蓝色

等...

在我的表单页面上,我想抓住问题及其所有答案选项以显示给最终用户。我似乎可以将问题列入清单,但我无法得到在我的视图上发布的问题和答案。

我以为我会在我的模型中处理查询(linq to 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循环中)?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

由于您已经在使用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或转发器)。

答案 1 :(得分:0)

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

这将检索带有问题的属性的答案列表...然后将该列表传递给视图。