【问题标题】:Using AddRange with Distinct() is not working with Enum将 AddRange 与 Distinct() 一起使用不适用于 Enum
【发布时间】:2015-07-21 04:24:54
【问题描述】:

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

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

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

无法从“System.Linq.IQueryable<Finder.Models.ProjectDifficulty>”转换为“System.Collections.Generic.IEnumerable<string>

我的控制器包含以下代码:

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

【问题讨论】:

  • 您是否尝试将其投射到列表中?如果你想对列表进行操作,你应该做 ProjectDifficultyQry.Distinct().ToList()
  • 你不是想将枚举的 IQueryable 添加到 List 吗?
  • @maque 我已经尝试投射到列表中,但它仍然显示错误,说明参数无效。基本上,我正在尝试使用从数据库中获取数据并将其用作下拉搜索列表。但是,我不确定为什么我会收到关于 IQueryable 的这个错误。虽然,我的模型中有另一个枚举,并且可以很好地与搜索列表一起使用,没有任何问题。
  • ProjectDifficultyenum 的类型,而不是string。很难理解你想在这里做什么。

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


【解决方案1】:

错误消息清楚地告诉您出了什么问题。您的ProjectDifficultyQryIQueryable&lt;ProjectDifficulty&gt; 类型,您想将其添加到List&lt;string&gt;。当然,你不能那样做。您需要将枚举值转换为字符串。以下是你的做法:

var ProjectDifficultyQry = from b in db.Projects
                           orderby b.ProjectDifficulty
                           select b.ProjectDifficulty.ToString();

ProjectDifficultyLst.AddRange(ProjectDifficultyQry.Distinct());

顺便说一句,您不必使用ToList()IQueryableIEnumerable(参见 here)。

还有一件事;我不知道你是如何在你的Enum 中使用那个DisplayAttribute 的。但是,如果您想在 SelectList 中使用“非常高”而不是“非常高”,请查看 this

【讨论】:

  • 嗨@ataravai,感谢您的回复。我已经设法通过使用'ViewBag.projectDifficulty = new SelectList(ProjectDifficultyQry.Distinct());'但是,它不会显示所有字段,它只显示中、高和非常高,但是表中还有另一个字段,称为复杂,但它没有显示在下拉框中。另外,我正在尝试根据用户选择进行过滤,对此有何建议?我正在考虑做这样的事情'SearchQry = SearchQry.Where(x => x.ProjectDifficulty = projectDifficulty);'
  • @HarshPanchal,您希望将所有项目难度添加到 SelectList 中还是只添加数据库中的那些?如果你想要所有这些,那你为什么要查询数据库?
  • 我需要 Project Difficulties 作为 SelectList,以便用户可以根据所选的 Project Difficulty 进行过滤。
  • @HarshPanchal,你没有得到我的问题。我知道您需要它作为 SelectList。但是,你为什么要查询数据库?您不需要 SelectList 中 Enum 中的所有选项吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 2012-12-24
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多