C# 填充linq数组的语法?

C# 填充linq数组的语法?,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我用动态数量的问题(可选)选项和用户答案填充“页面”。在调试期间,我可以看到填写的字段,但无论我尝试了什么,QuestionOptions都将填充为数组 这是一对多或无选项的问题,一个问题可以有多个答案,但每个用户ID只能有一个答案 这是我的问题 [HttpGet] public ActionResult ViewQuestion(int page = 1) { var userId = User.Identity.GetUserId(); var question = (fro

我用动态数量的问题(可选)选项和用户答案填充“页面”。在调试期间,我可以看到填写的字段,但无论我尝试了什么,QuestionOptions都将填充为数组

这是一对多或无选项的问题,一个问题可以有多个答案,但每个用户ID只能有一个答案

这是我的问题

[HttpGet]
public ActionResult ViewQuestion(int page = 1) {
    var userId = User.Identity.GetUserId();
    var question = (from q in db.Questions
                    join qo in db.QuestionOptions on q.Id equals qo.QuestionId
                    join r in db.Responses on q.Id equals r.QuestionId
                    where q.PageNumber == page && r.UserId == userId
                    select new GetQuestionViewModel
                    {
//   DOESN'T WORK       QuestionOption1 = qo.QuestionOption1.ToList<QuestionOption>(),
//   DOESN'T WORK       QuestionOption = qo.QuestionOptions.ToList<QuestionOption1>(),
                        QuestionOptionRanking = qo.QuestionOptionRanking,
                        Id = q.Id,
                        Options = q.Options,
                        QuestionTypeId = q.QuestionTypeId,
                        Question1 = q.Question1,
                        QuestionRanking = q.QuestionRanking,
                        Answer = r.Answer
                     }).ToList();
    return View(question);
}
[HttpGet]
公共行动结果视图问题(int page=1){
var userId=User.Identity.GetUserId();
变量问题=(从数据库问题中的q开始)
将qo加入q上的db.QuestionOptions中。Id等于qo.QuestionId
将r加入到数据库中。q.Id上的响应等于r.QuestionId
其中q.PageNumber==页面和&r.UserId==用户id
选择新的GetQuestionViewModel
{
//无法工作QuestionOption1=qo.QuestionOption1.ToList(),
//不起作用QuestionOption=qo.QuestionOptions.ToList(),
QuestionOptionRanking=qo.QuestionOptionRanking,
Id=q.Id,
选项=q.选项,
QuestionTypeId=q.QuestionTypeId,
问题1=问题1,
QuestionRanking=q.QuestionRanking,
答案
}).ToList();
返回视图(问题);
}
这是我的视图模型

public class GetQuestionViewModel
{
    public IEnumerable<Question> Questions { get; set; }
    public IEnumerable<QuestionOption> QuestionOptions { get; set; }
    public int PageNumber { get; set; }
    public int Id { get; set; }
    public Nullable<int> Options { get; set; }
    public string QuestionOption1 { get; set; }
    public Nullable<int> QuestionOptionRanking { get; set; }
    public string Question1 { get; set; }
    public int QuestionTypeId { get; set; }
    public Nullable<int> QuestionRanking { get; set; }
    public string Answer { get; set; }
}
公共类GetQuestionViewModel
{
公共IEnumerable问题{get;set;}
公共IEnumerable问题选项{get;set;}
公共整数页码{get;set;}
公共int Id{get;set;}
公共可空选项{get;set;}
公共字符串QuestionOption1{get;set;}
公共可为空的QuestionOptionRanking{get;set;}
公共字符串问题1{get;set;}
public int QuestionTypeId{get;set;}
公共可空问题排序{get;set;}
公共字符串答案{get;set;}
}
该视图可容纳4种问题类型

@using Microsoft.AspNet.Identity
@model IEnumerable<Template.Models.GetQuestionViewModel>
@{
    ViewBag.Title = "View question";
    Html.BeginForm("ViewQuestion", "Question", FormMethod.Post, new { @class = "form-horizontal", role = "form" });
}
@foreach (var q in Model) { var qtype = q.QuestionTypeId;
<div>
@Html.AntiForgeryToken();
<h1>@q.Question1</h1>
</div>
<hr />
<div class="form-group">  
@switch (qtype)
{
     case 1:
    // Textbox
        @Html.TextArea("Answer", new { @class = "form-control", rows = "4", col = "5" });
        break;

    case 2:
    //  Dropdown
    <select class="form-control" id="Answer" name="Answer">
        @foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
        {
            <option value="@item.QuestionOption1">@item.QuestionOption1</option>

        }
    </select>
    break;

case 3:
//    Checkbox
    <div class="checkbox">
        @foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
        {
            <input type="checkbox" name="Answer" value="@item.QuestionOption1" />  @item.QuestionOption1<br />

        }
    </div>
    break;

case 4:
//      Radio buttons
    foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
    {
    <div class="radio">
        <label>
            <input type="radio" name="Answer" value="@item.QuestionOption1" />
            @item.QuestionOption1
        </label>
    </div>
    }
    break;     
}
</div>
<input type="hidden" name="QuestionId" value="@q.Id" />
<input type="hidden" name="UserId" value="@User.Identity.GetUserId()" />
<input type="hidden" name="page" value="@q.PageNumber" />

}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
    <input type="submit" class="btn btn-default" value="Answer" />
</div>
</div>
@使用Microsoft.AspNet.Identity
@模型IEnumerable
@{
ViewBag.Title=“查看问题”;
BeginForm(“ViewQuestion”,“Question”,FormMethod.Post,new{@class=“form horizontal”,role=“form”});
}
@foreach(模型中的var q){var qtype=q.QuestionTypeId;
@Html.AntiForgeryToken();
@q、 问题1

@开关(qtype) { 案例1: //文本框 @TextArea(“Answer”,new{@class=“formcontrol”,rows=“4”,col=“5”}); 打破 案例2: //下拉列表 @foreach(q.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @项目1.问题选项1 } 打破 案例3: //复选框 @foreach(q.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @项目.问题选项1
} 打破 案例4: //单选按钮 foreach(q.QuestionOptions.OrderBy中的var项(o=>o.QuestionOptionRanking)) { @项目1.问题选项1 } 打破 } }
谁能看出我哪里出了错


提前感谢。

解决方案很简单;我的问题全错了!在一些朋友的帮助下,我终于得到了正确的语法,以我想要的方式执行查询;将问题按正确的顺序及其各种选项排序到正确的页面。下面是最终有效的查询

            List<GetQuestionViewModel> quest = new List<GetQuestionViewModel>();
        foreach (var item in db.Questions.Where(q => q.PageNumber == page).OrderBy(q => q.QuestionRanking))
        {
            quest.Add(new GetQuestionViewModel()
            {
                Id = item.Id,
                QuestionOptions = db.QuestionOptions
                .Where(k => k.QuestionId == item.Id)
                .ToList(),
               PageNumber = item.PageNumber,
                Question1 = item.Question1,
                QuestionRanking = item.QuestionRanking,
                QuestionTypeId = item.QuestionTypeId
            });
        }
        return View(quest);
List quest=newlist();
foreach(db.Questions.Where(q=>q.PageNumber==page.OrderBy(q=>q.QuestionRanking))中的变量项)
{
添加(新的GetQuestionViewModel()
{
Id=项目Id,
QuestionOptions=db.QuestionOptions
.Where(k=>k.QuestionId==item.Id)
.ToList(),
PageNumber=项目。PageNumber,
问题1=项目。问题1,
QuestionRanking=item.QuestionRanking,
QuestionTypeId=item.QuestionTypeId
});
}
返回视图(任务);

希望这能帮助像我这样刚接触fluent Linq的人!谢谢你的意见。这是一个很大的帮助。

您使用实体框架吗?是的,但我是一个非常新的人,可能没有正确地实现它。“
在调试过程中,我可以看到我填写的字段
”,所以您的
问题
列表不是空的吗?您能显示您的
视图吗
代码?Alex,您应该阅读EntityFramework中的导航属性(和导航属性集合)。它将解决您的问题您在哪里为
QuestionOptions
赋值?