如何使用实体框架将列表读入扩展SelectListItem类

本文关键字:扩展 SelectListItem 列表 何使用 实体 框架 | 更新日期: 2023-09-27 18:08:44

我正在使用c#, MVC和EF6在VS 2015中开发。我目前使用以下方式生成选择列表内容:

IEnumerable<SelectListItem> slist = new SelectList(dbContext.UserCategories
            .Where(x => x.DisplayOrder > 0)
            .OrderBy(x => x.UserCategoryType)
            .ThenBy(x => x.DisplayOrder)
            .ToList(), "UserCategoryID", "Category");

我需要扩展SelectListItem类如下:

public class ExtendedSelectListItem : SelectListItem
{
    public string HtmlAttribute { get; set; }
    public ExtendedSelectListItem()
    {
    }        
}

我的问题是,如何修改EF表达式来为新类生成合适的结果。(请注意字段UserCategoryID是一个int)

如何使用实体框架将列表读入扩展SelectListItem类

我不知道有任何要求,使SelectList,所以你可以:

vars list = dbContext.UserCategories
  .Where(x => x.DisplayOrder > 0)
  .OrderBy(x => x.UserCategoryType)
  .ThenBy(x => x.DisplayOrder)
  .ToList()
  .Select(uc => new ExtendedSelectListItem()
    {
      HtmlAttribute = "form-control",
      Value = uc.UserCategoryID.ToString(),
      Text = uc.UserCategoryType
    })
  .ToList()

类似的东西适用于Html.DropDownListFor()等(然而,HtmlAttributeDropDownListFor和其他内置方法未知的,所以它不会呈现任何东西,除非你自己编写知道如何使用ExtendedSelectListItem的方法)。