带字符串的动态LINQ?

web*_*ad3 5 c# linq razor asp.net-mvc-4

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

问题:

Id
Value
Run Code Online (Sandbox Code Playgroud)

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

QuestionAnswer:

Identity COL | QuestionAnswer1 | QuestionAnswer2 | QuestionAnswer3 ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建一个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++;
}
Run Code Online (Sandbox Code Playgroud)

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

Question1 | QA1
Question2 | QA1
Question3 | QA1
...
Run Code Online (Sandbox Code Playgroud)

我想要它

Question1 | QA1
Question2 | QA2
Question3 | QA3
...
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法使用iCount变量构建列名:

string QA = "QuestionAnswer"+iCount;
Run Code Online (Sandbox Code Playgroud)

然后我可以做这样的事情:

<td>@Model.Answers[0].QA</td>
Run Code Online (Sandbox Code Playgroud)

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

这是我正在使用的模型:

    public List<Question> Questions { get; set; }
    public List<QuestionAnswer> QuestionAnswers { get; set; }
Run Code Online (Sandbox Code Playgroud)

小智 0

我同意 George 的观点,这与 Linq 没有什么关系,我希望数据库和视图之间有一层或多层。

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

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