我创建的视图有两个表 - 一个用于admin,一个用于成员。我试图将用户分成每个表
这是我目前的观看代码(尝试过滤“admin”用户以获取以下代码)
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
@foreach (var item in Model.Where(User.IsInRole("Admin"))
{
<tr>
<td class="c">
@item.UserName
</td>
<td class="c">
@item.EmailConfirmed
</td>
</tr>
}
但是我收到错误 - 参数2:无法从'bool'转换为'System.Func'
我希望角色为“admin”的所有用户都在一个表上,并且角色“member”中的所有用户都在另一个表上。我该怎么做呢?
由于
答案 0 :(得分:2)
.Where()
扩展方法并不只是期待bool
,它期待{em}返回的Func<T, bool>
表达式 a {{ 1}}。请查看the documentation中的示例。
在您的尝试中,bool
会立即执行并将其结果传递给User.IsInRole("Admin")
。但是,通过使用.Where()
,Func<T, bool>
方法会将该表达式重新应用于集合中的每个元素,以用作这些元素的过滤器。
看起来更像是这样:
.Where()
答案 1 :(得分:0)
您的lambda表达式需要一个变量才能工作:
Model.Where(user => user.User.IsInRole("Admin"))
答案 2 :(得分:0)
尝试下面的代码段。它应该工作:
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
@foreach (var item in Model.Where(u=>{return u.User.IsInRole("Admin");})
{
<tr>
<td class="c">
@item.UserName
</td>
<td class="c">
@item.EmailConfirmed
</td>
</tr>
}
答案 3 :(得分:0)
为什么不在循环体内使用简单的if
语句?
if (User.IsInRole("Admin"))
{
// render HTML
}
这甚至会比使用LINQ
..