如何使用linq-to-sql检查组中的所有用户是否都具有用户角色
本文关键字:用户 是否 角色 linq-to-sql 何使用 检查组 | 更新日期: 2023-09-27 18:29:10
我想写一个DAO方法,检查组中的所有用户是否都有特定的用户角色,并返回false或true。
我使用NHibernate和LINQ。
这就是我迄今为止所做的:
public bool AllByGroupHaveUserRole(Group group, UserRole userRole)
{
if (group == null)
{
throw new ArgumentNullException("group");
}
if (userRole == null)
{
throw new ArgumentNullException("userRole");
}
var groups = HibernateTemplate.Execute(session => (from user in session.Query<User>()
where user.Group == @group
group user by user.UserRole.Id into groupedUsers
select new { groupedUsers.Key })).ToList();
return groups.Count < 2 && groups.All(o => o.Key == userRole.Id);
}
现在,我正在DB中执行查询,稍后在内存中检查UserRole。
是否可以在一个NHibernate查询中完成所有操作并返回结果?
如果组中没有具有特定用户角色的用户,则该方法也应返回true。
这也是LINQ方法IEnumerable.All方法的工作原理。
Return Value: True if every element of the source sequence passes the test in the specified predicate, or if the sequence is empty; otherwise, False.
我没有测试代码
from user in session.Query<User>()
where user.Group == @group
group user by new { RoleId = user.UserRole.Id } into groupedUsers
select groupedUsers.Select(t => t.UserRole.Id).Distinct().Count() < 2 || groupedUsers.Where(t => t.UserRole == userRole).Any()