【问题标题】:How to include values from two tables in a one to many relationship如何在一对多关系中包含来自两个表的值
【发布时间】:2012-09-18 18:20:31
【问题描述】:

我整天都在谈论这件事,这让我发疯了!

我正在尝试做的事情:

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

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

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

问题ID |问题描述

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

答案ID |问题ID |回答

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 循环中)?

非常感谢任何帮助!

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案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 或 repeater)。

    【讨论】:

    • 嗨 Joel - 我需要什么模型声明来说明我的观点?
    • @EddieWesley:我的假设是您将构建自己的模型来处理以这种方式键入的问题。此示例使用匿名类型,但预构建模型会更容易。
    • 谢谢 - 我会玩这个。我没有与我发布的内容结婚 - 我真的想在这里采取最好的方法。如果这更有意义,我什至正在考虑使用存储过程。我有一个 dbml 模型,如果可能的话,我很想利用它
    • @EddieWesley:我尽可能使用通过将表导入到我的 dbml 中自动生成的类。到目前为止,我的 dbml 类不支持的事情我已经能够使用自定义模型完成。
    • 谢谢。所以 - 我卡住的地方是视图。以您上面的示例为例,它可以在我的模型代码文件中……还是我的控制器中?这会作为 IEnumerable 传递给视图吗?如果这些可能很明显,我很抱歉,这只是我的第二个项目。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,罗米亚斯。不幸的是,我不认为 Include() 可用于 Linq to SQL 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-10-17
    • 2013-01-18
    相关资源
    最近更新 更多