NHibernate.Criterion方法解释
HQL运算符 | QBC运算符 | 含义 |
= | Restrictions.eq() | 等于equal |
<> | Restrictions.ne() | 不等于not equal |
> | Restrictions.gt() | 大于greater than |
>= | Restrictions.ge() | 大于等于greater than or equal |
< | Restrictions.lt() | 小于less than |
<= | Restrictions.le() | 小于等于less than or equal |
is null | Restrictions.isnull() | 等于空值 |
is not null | Restrictions.isNotNull() | 非空值 |
like | Restrictions.like() | 字符串模式匹配 |
and | Restrictions.and() | 逻辑与 |
and | Restrictions.conjunction() | 逻辑与 |
or | Restrictions.or() | 逻辑或 |
or | Restrictions.disjunction() | 逻辑或 |
not | Restrictions.not() | 逻辑非 |
in(列表) | Restrictions.in() | 等于列表中的某一个值 |
not in(列表) | Restrictions.not(Restrictions.in()) | 不等于列表中任意一个值 |
between x and y | Restrictions.between() | 闭区间xy中的任意值 |
not between x and y | Restrictions.not(Restrictions..between()) | 小于值X或者大于值y |
ICriteria criteria = this.Session.CreateCriteria<CpCourse>()
.CreateAlias(CpCourse._Organizations, "o")//表示CoOrganization实体和CpCourse实体做关联
//.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//可以根据别名再配置条件,该条件也可以写在
下面任意位置
.GetCriteriaByAlias("o")//表示跳到CoOrganization实体,如果不写表示还在CpCourse实体
.CreateAlias(CoOrganization._Users, "u")//表示CoUser实体和CoOrganization实体进行关联
.Add(Expression.Eq("u." + CoUser._UserName, "zhuangyq"));
//.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//如这个位置
IList<CpCourse> list = criteria.List<CpCourse>();
以下结果集同上面写法
ICriteria criteria = this.Session.CreateCriteria<CpCourse>()
.CreateCriteria(CpCourse._Organizations)//表示到达CoOrganization实体,与CpCourse实体关联
//.Add(Expression.Eq(CoOrganization._Address, "456"))//条件必须紧跟CoOrganization实体后面
.CreateCriteria(CoOrganization._Users)//表示到达CoUser实体,与CoOrganization实体关联
.Add(Expression.Eq(CoUser._UserName, "zhuangyq"));"))//条件必须紧跟CoUser实体后面
IList<CpCourse> list = criteria.List<CpCourse>();
CreateCriteria表示到达该实体,再与.CreateAlias或.CreateCriteria的后面的实体与该实体进行关联。
关于CreateCriteria实体的条件必须紧跟CreateCriteria的实体其后。
CreateAlias创建表别名的方式,只要在这个表的别名创建之后都可以再进行条件的添加(条件必须包含别名)
或者使用GetCriteriaByAlias方法达到该包含别名的实体后继续操作再进行.CreateAlias或.CreateCriteria。
在NHibernate里面查很常用。CreateAlias 返回值还是当前的Criteria,但是CreateCriteria返回的新的Criteria。
基本用法 如下。
var cri = session.CreateCrieria(typeof(User)) .CreateCriteria("Roles") .Add(Restrictions.Eq("RoleName","admin"); var cri = session.CreateCrieria(typeof(User)) .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin");
现在我除了想查role是admin的用户外,也想查出UserName名字叫做Joe的用户,那么他们就有区别
var cri = session.CreateCrieria(typeof(User)) .Add(Restrictions.Eq("UserName", "Joe") .CreateCriteria("Roles") .Add(Restrictions.Eq("RoleName","admin"); //第一种写法 var cri = session.CreateCrieria(typeof(User)) .Add(Restrictions.Eq("UserName", "Joe") //紧贴着User .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin"); //第二种写法。 var cri = session.CreateCrieria(typeof(User)) .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin"); .Add(Restrictions.Eq("UserName", "Joe") //前后都没有关系,贴着role也可以。