我有一个包含多个角色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,我匹配字符串数组中的任何条目
显然上面的查询不起作用且不正确。我只是把东西放在那里,以显示我想做什么。有人可以帮忙吗?
答案 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();