C# 填充linq数组的语法?
我用动态数量的问题(可选)选项和用户答案填充“页面”。在调试期间,我可以看到填写的字段,但无论我尝试了什么,QuestionOptions都将填充为数组 这是一对多或无选项的问题,一个问题可以有多个答案,但每个用户ID只能有一个答案 这是我的问题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
[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
赋值?