使用Linq来引用你用ViewModel实例化的表作为列表来生成'SelectListItems'列表的
本文关键字:列表 SelectListItems 引用 Linq ViewModel 使用 实例化 | 更新日期: 2023-09-27 18:09:42
我想在我的控制器中生成一个强类型的角色列表,以及另外两个列表,它们将在我的视图中用作发送电子邮件的各种过滤器。我知道我可以使用以下命令生成Roles列表:
var viewModel = new ListViewModel
{
Roles = db.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.Name }).ToList(),
};
然而,由于我也想传递两个其他列表到我的控制器,我更愿意通过以以下方式编写查询来获得角色列表:
var viewModel = db.Roles
.Select(x => new SendGroupEmailViewModel
{
Roles = x.Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.Name }).ToList(),
};
这样我就可以获得我的其他两个列表作为同一查询的一部分,而不是以前的方法,他们必须有效地独立查询数据库。显然,上面的内容不起作用,我无法在角色表上通过编写Roles = x.Select.
我的问题是,为什么我不能这样做,什么是正确的方式来查询角色表时,写它类似于上面的方式?
只是为了清楚,它必须是var viewModel = db的原因。角色是因为无论出于何种原因,我都无法访问ID/名称角色列表,否则由于身份如何在MVC中设置。我知道还有其他方法可以获得列表,我只是想知道这种具体的方法是如何实现的?
编辑-我应该在我的viewModel中添加角色如下:
public IEnumerable<SelectListItem> Roles { get; set; }
controller
var oList = db.Roles.Select(x => new SendGroupEmailViewModel
{
Roles = x.Roles.Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.Name }).ToList();
ViewData.myList = new SelectList(oList,
},
"Value", "Text", 15); // 15 = selected item or you can omit this value
视图<%=Html.DropDownList("myList") %>