Fluent nhibernate Fluent NHibernate-使用连接表上带过滤器的条件进行查询

Fluent nhibernate Fluent NHibernate-使用连接表上带过滤器的条件进行查询,fluent-nhibernate,nhibernate-criteria,Fluent Nhibernate,Nhibernate Criteria,我有以下几张表 用户-主列-Id和其他详细列 部门主列-Id和其他详细列 UserDepartment-主列-Id和其他列是UserId和DepartmentId 我想找到部门-(1和2)中的所有用户。 我还想找到部门-(1或2)中的所有用户 有谁能告诉我获取部门(1和2)中所有用户的标准吗?获取部门中所有用户的另一个标准-(1或2) 我是FluentNHibernate的新手,所以我没有尝试过任何东西,因为我在谷歌搜索中没有发现任何相关内容?在谷歌搜索的帮助下,我能够为1-1关系编写标准,

我有以下几张表

  • 用户-主列-Id和其他详细列
  • 部门主列-Id和其他详细列
  • UserDepartment-主列-Id和其他列是UserId和DepartmentId
我想找到部门-(1和2)中的所有用户。 我还想找到部门-(1或2)中的所有用户

有谁能告诉我获取部门(1和2)中所有用户的标准吗?获取部门中所有用户的另一个标准-(1或2)


我是FluentNHibernate的新手,所以我没有尝试过任何东西,因为我在谷歌搜索中没有发现任何相关内容?在谷歌搜索的帮助下,我能够为1-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");
   }
}
类用户
{
公共虚拟整数Id{get;private set;}
公共虚拟ICollection部门{get;private set;}
}
班级部
{
公共虚拟整数Id{get;private set;}
}
类UserMap:ClassMap
{
公共用户映射()
{
Id(x=>x.Id);
HasManyToMany(x=>x.Departments)
.表格(“用户部门”)
.ParentKeyColumn(“用户ID”)
.ChildKeyColumn(“部门ID”);
}
}
然后查询1或2

var results = session.QueryOver<User>()
    .JoinQueryOver<Department>(x => x.Departments)
        .Where(d => d.Id.IsIn(departmentIds))
    .List();
var results=session.QueryOver()
.JoinQueryOver(x=>x.Departments)
.其中(d=>d.Id.IsIn(部门Id))
.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();
User userAlias=null;
var subquery=session.QueryOver()
.Where(d=>d.User.Id==userAlias.Id&&d.Id.IsIn(部门Id))
.Select(projects.RowCount());
var results=session.QueryOver()
.WithSubquery.WhereValue(departments.Count).Eq(子查询)
.List();

欢迎来到StackOverflow!你尝试过什么,哪些不适合你?我是FluentNHibernate的新手,所以还没有尝试过任何东西,因为我在谷歌搜索中没有发现任何相关内容?在谷歌搜索的帮助下,我能够为1-1关系编写标准,但不能为上述场景编写标准。感谢回复。。但它不起作用。。。首先,它无法在查询中获取d.Id。我猜,这是因为d代表部门的集合。如果我在x.Departments上应用where条件,则IsIn选项不可用。我遗漏了什么吗?我的另一个疑问是IsIn可能会提供部门1或部门2的用户,但我需要与部门1和部门2关联的用户。编译器有时不会使用正确的JoinQueryOver重载。谢谢,在您的QueryOver逻辑的帮助下,我能够建立标准并解决我的问题。还有一件事我想知道,那就是,建议使用什么“QueryOver”或“CreateCriteria”?QueryOver是一个围绕Criteria的类型安全包装器。它以最小的性能开销为代价,让您的生活更轻松。如果你热衷于从一秒钟剃掉纳秒,或者拥有非类型化/字符串化的属性,那么标准就是你的选择。