ASP.NET MVC Model.Where子句

时间:2018-01-31 14:00:09

标签: c# asp.net-mvc

我创建的视图有两个表 - 一个用于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”中的所有用户都在另一个表上。我该怎么做呢?

由于

4 个答案:

答案 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 ..

快一点 BTW,视图不应该执行这种逻辑操作。我们使用MVC来分离关注点。