编辑:正如保罗所说,我只接受参数中每个值的一个可能值。因此,通过该逻辑,他们应该切换到列表。这导致了一个空的引用异常,虽然我仍然试图解决这个问题。
我正在尝试创建一个包含类别,问题和答案的调查构建器。目前,当我尝试更新类别,问题和答案的数据时,它只更新每个的第一个实例。我相信问题是因为我使用.Single方法。是否有用于列表的替代方法?
以下是仅更新第一个实例的两个示例。
public ActionResult Save(Survey survey, List<Category> category, List<Question> question, List<Answer> answer)
{
//var categoryInDb = _context.Categories.Single(m => m.CategoryId == category.CategoryId);
//categoryInDb.CategoryDescription = category.CategoryDescription;
//Updated loop.
foreach (var categorytoAdd in category)
{
foreach (var categoryInDb in _context.Categories.Where(m => m.CategoryId == categorytoAdd.CategoryId))
categoryInDb.CategoryDescription = categorytoAdd.CategoryDescription;
}
var questionInDb = _context.Questions.Single(m => m.QuestionId == question.QuestionId);
questionInDb.QuestionText = question.QuestionText;
_context.SaveChanges();
return RedirectToAction("Index", "Surveys");
}
在视图模型中,它们被定义为
public List<Category> Categories { get; set; }
public List<Question> Questions { get; set; }
答案 0 :(得分:1)
您怀疑Single
只返回满足您条件的单个项目。如果您想要多个项目,请使用Where
(当然会返回IEnumerable
)。因为它现在是一个集合,你必须foreach
来改变/访问/使用项目。
这样:
foreach (var categoryInDb in _context.Categories.Where(m => m.CategoryId == category.CategoryId))
categoryInDb.CategoryDescription = category.CategoryDescription;
正如一个沉没注意到的那样,如果你有一个以上的记录,那么你Single
实际上会抛出;所以在你修改整个查询以返回多个结果之前,这不会做任何事情。