如何在Collection Nhibernate上添加Restriction Conjunction

时间:2014-09-01 10:03:26

标签: nhibernate collections queryover

我有一个集合,我需要queryOver并添加限制。

public class User {
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Role> Roles {get;set;}
}

现在我想在Nhibernate中查询,如果用户通过Admin角色获取任何角色,我还需要获得结果。

Conjunction conjunction = new Conjunction();
Disjunction disjunction = new Disjunction();

if (!string.IsNullOrEmpty(search))
{
    disjunction.Add(Restrictions.On<User>(e => e.Name)
        .IsLike(string.Format("%{0}%", search)));

    conjunction.Add(disjunction);
}

IList<User> users = NhSession.QueryOver<User>()
        .Where(conjunction)
        .OrderBy(x => x.Name).Asc()
        .Take(maxResults)
        .List();

如果我有一个RoleName字符串参数并从查询中获取这些记录,我该如何过滤。

1 个答案:

答案 0 :(得分:0)

你应该能够加入Roles(假设这是一个映射的关联)并过滤:

Role roleAlias = null;

IList<User> users = NhSession.QueryOver<User>()
    .Where(conjunction)
    .JoinAlias(() => user.Roles, () => roleAlias)
        .Where(() => roleAlias.Name == "Admin") // or whatever your restriction is
    .OrderBy(x => x.Name).Asc()
    .Take(maxResults)
    .List();