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也可以。