如何检查linq to sql,组的所有用户都有用户角色?

时间:2014-11-04 17:34:27

标签: c# nhibernate linq-to-sql dao

我想编写一个DAO方法,检查组中的所有用户是否具有特定的用户角色,并返回false或true。

我使用NHibernate ad 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.

1 个答案:

答案 0 :(得分:0)

我没有测试代码

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()