C# 如何使用linq筛选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

我试图用where子句过滤SelectList,但出现以下错误

无法将类型为“WhereEnumerableIterator`1[System.Web.Mvc.SelectListItem]”的对象强制转换为类型为“System.Web.Mvc.SelectList”

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