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
我是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的类型安全包装器。它以最小的性能开销为代价,让您的生活更轻松。如果你热衷于从一秒钟剃掉纳秒,或者拥有非类型化/字符串化的属性,那么标准就是你的选择。