Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';系统Linq.IQueryable<;System.Web.Mvc.SelectListItem>';至';System.Web.Mvc.SelectList';_C#_Asp.net Mvc_Linq_Iqueryable_Selectlistitem - Fatal编程技术网

C# 无法隐式转换类型';系统Linq.IQueryable<;System.Web.Mvc.SelectListItem>';至';System.Web.Mvc.SelectList';

C# 无法隐式转换类型';系统Linq.IQueryable<;System.Web.Mvc.SelectListItem>';至';System.Web.Mvc.SelectList';,c#,asp.net-mvc,linq,iqueryable,selectlistitem,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

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

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>());
    }
}
它说有一个明确的转换存在,但到目前为止,我的搜索还没有找到一个。有没有办法解决这个问题

您有两个问题(至少)

首先,您也没有选择正确的类型
MajSecList
的类型为
SelectList
,但您正在显式地选择
SelectListItem
。您需要更新
选择

选择
不会立即执行。您需要使用类似于
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 }));

实际上,OP需要一个集合,而不是第一项。这也不能解决问题,因为
SelectListItem
不是
SelectList
。另外,请注意,OP在错误行的正下方正确执行了此操作,并且此答案应该匹配that@GabrielLuci最后一次编辑对我来说似乎是正确的答案。@GabrielLuci在结尾添加.ToList()时给出了一个不同的错误“无法将类型'System.Collects.Generic.List'隐式转换为'System.Web.Mvc.SelectList',但根据您的其他建议将查询传递给SelectList的构造函数!”!非常感谢大家!您的最后一行代码错误-(并且在视图中将生成所有选项,文本和值为
“System.Web.Mvc.SelectListItem”
)我不理解这个问题。使用errorA
DropDownListFor()方法,您可以在行的正下方正确地执行此操作,并使用一个
IEnemerable`生成选项。您的
FailureList
属性应该就是这样(而不是
SelectList
,它只是
IEnumerable
的包装器),如果您将
SelectList
构造函数用于复杂对象的集合,还需要指定用于选项值和文本的属性名称
model.MajSecList = new SelectList(db.EngineOIRFRs.Select(m => new SelectListItem { Value = m.MajorSection.ToString(), Text = m.MajorSection }));