我的控制器中有一个方法:
private void ConfigureViewModel(EngineOIRemovalsViewModel model)
{
model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection });
if (model.SelectedMajorSection != null)
{
IEnumerable<EngineOIRFR> Areas = db.EngineOIRFRs.Where(l => l.MajorSection == model.SelectedMajorSection);
model.AreaList = new SelectList(Areas);
}
else
{
model.AreaList = new SelectList(Enumerable.Empty<SelectListItem>());
}
if (model.SelectedArea != null)
{
IEnumerable<EngineOIRFR> SubAreas = db.EngineOIRFRs.Where(l => l.Area == model.SelectedArea);
model.SubAreaList = new SelectList(SubAreas);
}
else
{
model.SubAreaList = new SelectList(Enumerable.Empty<SelectListItem>());
}
if (model.SelectedArea != null)
{
IEnumerable<EngineOIRFR> Failures = db.EngineOIRFRs.Where(l => l.SubArea == model.SelectedSubArea);
model.FailureList = new SelectList(Failures);
}
else
{
model.FailureList = new SelectList(Enumerable.Empty<SelectListItem>());
}
}
我从下面一行的标题中收到错误:
model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection });
它表示存在明确的转换,但到目前为止,我的搜索还没能找到。关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
你有两个问题(至少)
首先,您也不是Select
正确的类型。 MajSecList
的类型为SelectList
,但您明确选择了SelectListItem
。您需要更新Select
。
第二次,Select
不会立即执行。您需要使用ToList
或FirstOrDefault
(取决于您需要的)来实际执行查询并返回结果:
model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }).ToList();
我们的想法是,您可以构建查询,将Select
或Where
等操作链接在一起,而不必每次都执行查询。
完成查询并使用FirstOrDefault
或ToList
(或其他人)后,它实际执行查询并返回结果。
或者只是在下面执行您正在执行的操作,并将查询传递给SelectList
的构造函数:
model.MajSecList = new SelectList(db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }));