无法隐式转换类型System.Linq.IQueryable <system.web.mvc.selectlistitem>&#39;到&#39; System.Web.Mvc.SelectList&#39;

时间:2018-03-14 13:46:11

标签: c# asp.net-mvc linq iqueryable selectlistitem

我的控制器中有一个方法:

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 });

它表示存在明确的转换,但到目前为止,我的搜索还没能找到。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

你有两个问题(至少)

首先,您也不是Select正确的类型。 MajSecList的类型为SelectList,但您明确选择了SelectListItem。您需要更新Select

第二次Select不会立即执行。您需要使用ToListFirstOrDefault(取决于您需要的)来实际执行查询并返回结果:

model.MajSecList = db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }).ToList();

我们的想法是,您可以构建查询,将SelectWhere等操作链接在一起,而不必每次都执行查询。

完成查询并使用FirstOrDefaultToList(或其他人)后,它实际执行查询并返回结果。

或者只是在下面执行您正在执行的操作,并将查询传递给SelectList的构造函数:

model.MajSecList = new SelectList(db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }));