如何确定IEnumerable角色是否包含字符串数组中的任何角色?

时间:2016-10-03 08:41:57

标签: c# asp.net-mvc linq asp.net-mvc-4 lambda

我有一个包含多个角色ID的字符串数组。在我的控制器中,我想返回一个用户列表,其中包含在阵列中找到的一个或多个角色,以便发送电子邮件。如下所示:

var sendto = db.Users
            .Where(j => j.Roles.SelectMany(h => h.RoleId).Any(model.SelectedRoles))
            .ToList();

其中model.SelectedRoles是角色ID的字符串数组,j.Roles是MVC标识的Roles表,其中包含字符串字段Role ID,我匹配字符串数组中的任何条目

显然上面的查询不起作用且不正确。我只是把东西放在那里,以显示我想做什么。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

也许相交方法可以帮助你:

var sendto = db.Users
            .Where(j => j.Roles.Select(h => h.RoleId).Intersect(model.SelectedRoles).Any())
            .ToList(); // Note that in your answer it was SelectMany

答案 1 :(得分:1)

您可以使用.Any()

var sendto = db.Users
    .Where(j => j.Roles
        .Any(h => model.SelectedRoles.Any(i => i == h))
    )
    .ToList();

答案 2 :(得分:1)

  

我想返回一个在数组中找到一个或多个角色的用户列表

一个或多个角色 会转换为Any,而 会在数组中找到 转换为Contains

var sendto = db.Users
    .Where(user => user.Roles.Any(role => model.SelectedRoles.Contains(role.RoleId)))
    .ToList();

答案 3 :(得分:0)

尝试

var sendto = db.Users
            .Where(j => model.SelectedRoles.Contains(j.Roles))
            .ToList();