【问题标题】:Dynamic LINQ with a string?带字符串的动态 LINQ?
【发布时间】:2014-02-03 19:12:25
【问题描述】:

我有一个来自现有表的实体对象,它是 Question 表。

问题

Id
Value

我有另一个实体对象,它是一个Answer 表,但是它非常扁平:

问题解答

Identity COL | QuestionAnswer1 | QuestionAnswer2 | QuestionAnswer3 ...

我正在尝试构建一个 HTML 表格,在其中我在 1 列中显示问题,然后在旁边的列中显示答案。

但由于答案表是平的,我遇到了问题。

@{int iCount = 0;
  string answerKey = "";}
@foreach (var item in Model.Questions) {
var calc = iCount + 1;
answerKey = "QuestionAnswer" + calc.ToString();

<tr>
    <td>@Model.Questions[iCount].Question</td>
    <td>&nbsp;</td>
    <td></td>
    <td>&nbsp;</td>
    <td>@Model.Answers[0].QuestionAnswer1</td>
    <td>&nbsp;</td>
    <td></td>
    <td>&nbsp;</td>
    <td></td>
</tr>
 iCount++;
}

我可以完美地显示问题,但由于表格的设置方式,QuestionAnswer1 会显示所有不正确的问题:

Question1 | QA1
Question2 | QA1
Question3 | QA1
...

我想要它

Question1 | QA1
Question2 | QA2
Question3 | QA3
...

我想知道是否有一种方法可以使用 iCount 变量来构建列名:

string QA = "QuestionAnswer"+iCount;

那么我可以这样做:

<td>@Model.Answers[0].QA</td>

但这不对...我可以做这样的事情还是有另一种非常明显的方法?

这是我正在使用的模型:

    public List<Question> Questions { get; set; }
    public List<QuestionAnswer> QuestionAnswers { get; set; }

【问题讨论】:

  • 您可以粘贴模型的 C# 类定义吗?
  • 我正在使用实体框架,所以我的对象来自我在问题中发布的数据库本身(问题和 QuestionAnswer)。我会发布模型,但它只有 2 个列表(问题和问题答案)。
  • 我真的不清楚这与 linq 或动态 linq 有什么关系...
  • 我现在明白你在问什么,但这对于静态类型语言来说是错误的方法。使用反射可能的,但既不容易也不容易。如果您真的想要做这样的事情而不是使用字典而不是硬编码模型。但是,更好的方法是将问题与视图模型中的正确答案相关联,然后再将其发送到视图。
  • 是的,我绝对是对的:P

标签: c# linq asp.net-mvc-4 razor


【解决方案1】:

我同意 George,这与 Linq 关系不大,我希望您的数据库和视图之间存在一层或多层。

  • 绑定到 ViewModel
  • 创建一个同时包含问题和相应答案的对象
  • 使用适当的数据从问题/答案中填充 ViewModel 中所述对象的列表
  • 绑定到列表,每行只需绑定到问题和答案

您正在谈论有关问题和答案实际上如何相互关联的业务逻辑,如果这不是直接的关系,在您看来似乎没有必要尝试解决这个问题。

【讨论】:

    【解决方案2】:

    请用我的代码替换您的代码。

    <table class="table" style="table-layout:auto;width:20%;">
        <tr>
        <td>Question | Answer</td>
        @for (int i = 0; i < Model.Questions.Count; i++)
        {
        <tr>
            <td>
                @Model.Questions[i].Question @Model.Questions[i].QuestionID  
            </td>           
            <td>
                |
            </td>
            <td >
                @Model.Answers[i].Answer
            </td>
        </tr>
        }
    </table>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多