C# 如何使用linq筛选SelectList
我试图用where子句过滤SelectList,但出现以下错误 无法将类型为“WhereEnumerableIterator`1[System.Web.Mvc.SelectListItem]”的对象强制转换为类型为“System.Web.Mvc.SelectList”C# 如何使用linq筛选SelectList,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我试图用where子句过滤SelectList,但出现以下错误 无法将类型为“WhereEnumerableIterator`1[System.Web.Mvc.SelectListItem]”的对象强制转换为类型为“System.Web.Mvc.SelectList” public SelectList ReadDocumentHeaderTypeList() { 使用(context=new Pinc_DBEntities()) { 列表选择列表= (来自context.tblDocument
public SelectList ReadDocumentHeaderTypeList()
{
使用(context=new Pinc_DBEntities())
{
列表选择列表=
(来自context.tblDocumentHeaderTypes中的tb)
选择新的SelectListItem
{
Value=SqlFunctions.StringConvert((双精度)tb.DocumentHeaderTypeID).Trim(),
Text=tb.DocumentHeaderTypeDescription,
}).OrderBy(o=>o.Text).ToList();
SelectList slist=新的SelectList(选择列表,“值”、“文本”);
回程滑脱;
}
}
SelectList sl=(SelectList)代表ReadDocumentHeaderTypeList()。其中(o=>o.Value==“5”和&o.Value==“6”)//这里发生错误
更改此选项:
SelectList sl = (SelectList)rep.ReadDocumentHeaderTypeList().Where(o => o.Value == "5" && o.Value == "6");
为此:
SelectList sl = new SelectList(rep.ReadDocumentHeaderTypeList().Where(o => o.Value == "5" && o.Value == "6"));
问题正是编译器告诉您的,Where
的结果不是SelectList
。解决办法是根据结果制作一个
另外,请注意where子句检查Value
是否等于5
和6
,这将始终为false(假设Value
为string
)
您的
SelectList
上的文档似乎包含SelectListItem
对象的列表。我不确定它在内部是什么样子,但您必须向新的SelectList
实例提供项目列表。我想你得再做一次
... = new SelectList(rep.ReadDocumentHeaderTypeList()
.Where(o => o.Value == "5" || o.Value == "6").ToList(),
"Value", "Text");
你好my bad它必须是OR子句。在您的答案中,仍然必须指定Grant Winney答案中的“文本”和“值”字段。否则,文本显示为“System.Web.MVC.SelectListItem”。所以我要接受格兰特的帖子作为答案,我已经投票支持了你的答案。谢谢
... = new SelectList(rep.ReadDocumentHeaderTypeList()
.Where(o => o.Value == "5" || o.Value == "6").ToList(),
"Value", "Text");