ASP.Net MVC从Enum字段EF6中使用下拉字段过滤数据
本文关键字:字段 数据 过滤 EF6 MVC Net Enum ASP | 更新日期: 2023-09-27 18:17:26
. Net 4.5 MVC EF6实体框架
我有一个枚举在我的模型。我喜欢通过枚举类型字段上的where子句过滤/排序列表。为此,我创建了一个dropdownfield。我的SelectList:
var FGenre = Enum.GetValues(typeof(FileGenre)).Cast<FileGenre>().Select(c => new SelectListItem{ Text = c.ToString(), Value= c.ToString() });
所以我得到一个列表(value和text是Enum中的文本)。
现在我喜欢用'Where'来过滤我的数据,比如:
var model = db.Filetypes.Where(fg => fg.FileGenres.Equals(????????).);
我怎么能建立一个地方克劳斯过滤Enum
或
- 我怎么能得到一个列表的下拉列表与值=值(int)和文本,我怎么能过滤Enum(int)。
我仍然是新的LINQ, Lambda和MVC一般。如果有人有更好的方法,请随时添加您的意见。
编辑:我的模型:
public partial class Filetype
{
[Display(Name = "ID")]
public int FiletypeId { get; set; }
[StringLength(128)]
[Display(Name="Datei Art")]
public string TypeName { get; set; }
[Display(Name = "Genre")]
public FileGenre FileGenres { get; set; }
.......
public virtual ICollection<FiletypeRole> FiletypeRoles { get; set; }
}
public enum FileGenre
{
NNB_A,
NNB_B,
NNB_C
}
问题是selectlist将枚举表示为字符串,因此您必须在查询中将其转换为enum,这相当难看:
FileGenre MyGenre = (FileGenre) Enum.Parse(typeof(FileGenre), model.FileGenre, true);
因此,可以使用带int值的enum。像这样声明:
public enum FileGenre
{
NNB_A = 1,
NNB_B = 2,
NNB_C = 3
}
然后填充selectlist(这里我创建了一个返回selectlist的方法):
public SelectList GetAsSelectList()
{
var enumList = (from Enum e in Enum.GetValues(typeof(FileGenre))
select new
{
Name = e,
Id = Convert.ToInt32(e).ToString()
}).ToList();
return new SelectList((IEnumerable)enumList, "Id", "Name");
}
现在选择列表将有一个int
值,当你POST它并在过滤中使用它时将正确绑定:
var model = db.Filetypes.Where(fg => fg.FileGenres == model.FileGenre).ToList();
正如@Alberto提到的,Filetype
上的FileGenre
属性应该是单数的,因为FileGenres
使它看起来像一个集合或列表,这可能会令人困惑。