使用带有Distinct()的AddRange不能与Enum一起使用

时间:2015-05-10 17:42:34

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

我正在尝试从我的模型中过滤我的enum字段之一。这是我的enum

的定义
public enum ProjectDifficulty
{
    Medium,
    High,
    [Display(Name = "Very High")]
    VeryHigh,
    Complex
}

但我无法得到结果;我看到了这个错误:

  

无法转换为&#39; 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);
}

1 个答案:

答案 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()IQueryableIEnumerable(请参阅here)。

还有一件事;我不知道您在DisplayAttribute中使用Enum的方式。但是,如果你想使用&#34;非常高&#34;而不是&#34; VeryHigh&#34;在SelectList中,选中this