流畅的NHibernate - 使用条件查询连接表上的过滤器

时间:2013-06-29 16:44:48

标签: fluent-nhibernate nhibernate-criteria

我有以下表格

  • 用户 - 主要列 - 标识和其他详细信息列
  • 部门 - 主要列 - Id和其他详细信息列
  • UserDepartment - 主要列 - Id和其他列是UserId和DepartmentId

我想找到所有部门用户 - (1和2)。 我还想找到所有部门用户 - (1或2)。

有人可以向我建议让所有用户进入部门(1和2)的标准吗?让所有用户进入部门的另一个标准 - (1或2)?

我是FluentNHibernate的新手,因此我没有尝试任何操作,因为我发现Google搜索没有任何相关内容?在谷歌搜索的帮助下,我能够为1-1关系编写标准,但不能用于上述情况。

1 个答案:

答案 0 :(得分:1)

假设以下课程

class User
{
    public virtual int Id { get; private set; }
    public virtual ICollection<Department> Departments { get; private set; }
}

class Department
{
    public virtual int Id { get; private set; }
}

class UserMap : ClassMap<User>
{
    public UserMap()
   {
       Id(x => x.Id);
       HasManyToMany(x => x.Departments)
           .Table("UserDepartment")
           .ParentKeyColumn("UserId")
           .ChildKeyColumn("DepartmentId");
   }
}

然后查询1或2

var results = session.QueryOver<User>()
    .JoinQueryOver<Department>(x => x.Departments)
        .Where(d => d.Id.IsIn(departmentIds))
    .List();

查询1和2

User userAlias = null;
var subquery = session.QueryOver<Department>()
    .Where(d => d.User.Id == userAlias.Id && d.Id.IsIn(departmentIds))
    .Select(Projections.RowCount());

var results = session.QueryOver<User>()
    .WithSubquery.WhereValue(departments.Count).Eq(subquery)
    .List();