我正在尝试从我的模型中过滤我的enum
字段之一。这是我的enum
:
public enum ProjectDifficulty
{
Medium,
High,
[Display(Name = "Very High")]
VeryHigh,
Complex
}
但我无法得到结果;我看到了这个错误:
无法转换为'
System.Linq.IQueryable<Finder.Models.ProjectDifficulty>
&#39;到&#39;System.Collections.Generic.IEnumerable<string>
&#39;
我的控制器包含以下代码:
var ProjectDifficultyLst = new List<string>();
var ProjectDifficultyQry = from b in db.Projects
orderby b.ProjectDifficulty
select b.ProjectDifficulty;
ProjectDifficultyLst.AddRange(ProjectDifficultyQry.Distinct());
ViewBag.projectDifficulty = new SelectList(ProjectDifficultyLst);
if (!String.IsNullOrEmpty(projectDifficulty))
{
SearchQry = SearchQry.Where(l => l.ProjectDifficulty == projectDifficulty);
}
答案 0 :(得分:3)
错误消息清楚地告诉您出了什么问题。您的ProjectDifficultyQry
类型为IQueryable<ProjectDifficulty>
,并且您想将其添加到List<string>
。当然,你不能这样做。您需要将枚举值转换为字符串。以下是您的工作方式:
var ProjectDifficultyQry = from b in db.Projects
orderby b.ProjectDifficulty
select b.ProjectDifficulty.ToString();
ProjectDifficultyLst.AddRange(ProjectDifficultyQry.Distinct());
顺便说一句,您不必使用ToList()
。 IQueryable
为IEnumerable
(请参阅here)。
还有一件事;我不知道您在DisplayAttribute
中使用Enum
的方式。但是,如果你想使用&#34;非常高&#34;而不是&#34; VeryHigh&#34;在SelectList
中,选中this。