2016-09-30 14 views
0

我想在我的控制器中生成一个强类型的角色列表,以及其他两个列表,这些列表将在我的视图中用作发送电子邮件的各种过滤器。我知道我可以使用下面的生成角色列表:什么是正确的方式来使用Linq引用您的ViewModel实例化的表作为列表来生成'SelectListItems'列表?

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来选择角色表。

我的问题是,为什么我无法做到这一点,以类似于上面的方式编写它时,查询Roles表的正确方法是什么?

要清楚,它必须是var viewModel = db.Roles的原因是因为无论什么原因,我不能访问ID /名称角色列表,否则由于身份是如何在MVC中设置的。我知道还有其他的方式来获得这份清单,我只想知道如何以特定的方式来完成这项工作?

编辑 - 我要补充一点,在我的ViewModel角色如下:

public IEnumerable<SelectListItem> Roles { get; set; } 
+0

你需要使用(在viewbag或视图模型) SelectList sList = new SelectList(selectList,“Text”,“Value”,selected); – Emil

+0

感谢您的回复,但我不确定这是如何回答我的问题或帮助我的,你能解释一下你的意思吗?这与我在第二个示例中编写的特定查询风格有什么关系,它如何帮助我在查询中以我需要的方式引用Roles表? – Rob

回答

0

控制器

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") %> 
+0

感谢您的回复,但这不起作用。我的问题是,我不能直接使用该风格的查询在角色表上“选择”。所以x.Roles.Select或x.Select都不起作用。我已经可以生成适当的列表,因此您的答案的ViewData部分不是必需的。 – Rob

+0

你得到了什么错误/结果?你可以尝试“var oList = from oRole in db.Roles select oRole” – Emil

+0

错误是.Select在上下文中不存在。我不能x。选择使用我列出的查询类型。感谢您的其他建议,但正如我试图在我的问题中解释的那样,我已经可以使用第一个查询得到我想要的列表,我的问题纯粹是关于使用第二个查询的特定样式来引用角色表,你已经建议对第二个查询有不同的写法。总之,我的问题是没有达到结果,它使用我的问题的第二个例子中使用的特定格式来实现结果。 – Rob

相关问题