无法将类型 'System.Linq.IQueryable<System.Web.Mvc.SelectListItem>' 隐式转换为 'System.Web.Mvc.SelectList'
Cannot implicitly convert type 'System.Linq.IQueryable<System.Web.Mvc.SelectListItem>' to 'System.Web.Mvc.SelectList'
我的控制器中有一个方法:
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 });
它说存在一个明确的转换,但到目前为止我的搜索还没有找到一个。关于如何解决这个问题的任何想法?
你有两个问题(至少)
首先,你也Select
类型不对。 MajSecList
的类型为 SelectList
,但您明确选择了 SelectListItem
。您需要更新 Select
.
其次,Select
没有立即执行。您需要使用 ToList
或 FirstOrDefault
之类的东西(取决于您的需要)来实际执行查询和 return 结果:
model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }).ToList();
这个想法是您可以构建一个查询,将 Select
或 Where
等操作链接在一起,而无需每次都执行查询。
完成查询并使用 FirstOrDefault
或 ToList
(或其他)后,它实际上会执行查询并 return 返回结果。
或者只是做你正在做的事情,然后将查询传递给 SelectList
:
的构造函数
model.MajSecList = new SelectList(db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }));
我的控制器中有一个方法:
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 });
它说存在一个明确的转换,但到目前为止我的搜索还没有找到一个。关于如何解决这个问题的任何想法?
你有两个问题(至少)
首先,你也Select
类型不对。 MajSecList
的类型为 SelectList
,但您明确选择了 SelectListItem
。您需要更新 Select
.
其次,Select
没有立即执行。您需要使用 ToList
或 FirstOrDefault
之类的东西(取决于您的需要)来实际执行查询和 return 结果:
model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }).ToList();
这个想法是您可以构建一个查询,将 Select
或 Where
等操作链接在一起,而无需每次都执行查询。
完成查询并使用 FirstOrDefault
或 ToList
(或其他)后,它实际上会执行查询并 return 返回结果。
或者只是做你正在做的事情,然后将查询传递给 SelectList
:
model.MajSecList = new SelectList(db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }));