代码改变世界

NHibernate Step By Step(9)-条件查询(Criteria Queries)

  Clingingboy  阅读(799)  评论(0编辑  收藏  举报

Criteria 查询是其中查询的一种,其特点是,以各种API来进行查询,大家都不喜欢以字符串形式来查询,比如HQL.这种查询也犹如linq的where,any,等子查询。非常的方便,一般大家会首选此查询.

一.Criteria以ICriteria接口的方式链接(chain)方式编写,首先是创建ICriteria接口

ICriteria criteria = session.CreateCriteria(typeof(Student));


顾名思义ICriteria的主要任务当然就是查询了,下面来看下比较重要的。

1.查询表达式

ICriterion是一个查询条件结果集,可以通过ICriteria的Add方法添加条件

(2)表示式写法(以实例方式声明一个表达式)

using (ISession session = this.OpenSession())
 {
     ICriteria criteria = session.CreateCriteria(typeof(Student), "c");
     criteria.Add(new LikeExpression(Projections.Property("Name"), "John", MatchMode.Anywhere));
     Assert.AreEqual(1, criteria.List().Count);
 }


(2)使用投影查询(以Restriction快捷创建一个表达式,Restriction提供了创建表达式的快捷方式)

ICriteria criteria = session.CreateCriteria(typeof(Student), "c");
 criteria.Add(Restrictions.Like(Projections.Constant("Name"), "John", MatchMode.Anywhere));


public static AbstractCriterion IsNull(IProjection projection)
 {
     return new NullExpression(projection);
 }

public static AbstractCriterion Between(string propertyName, object lo, object hi)
 {
     return new BetweenExpression(propertyName, lo, hi);
 }

下列为常用的查询

1.排序

ICriteria criteria = session.CreateCriteria(typeof(Student), "c");
 
 criteria
     .AddOrder(Order.Asc(
                             Projections.Conditional(
                                 Restrictions.Eq("StudentNumber", (long)1),
                                 Projections.Constant(0),
                                 Projections.Constant(1)
                                 )));

2.转换结果为数字

ICriteria countCriteria = CriteriaTransformer.TransformToRowCount(crit);

3.添加一般查询条件参数

ICriteria c = session.CreateCriteria(typeof(Student));
                 c.Add(Expression.Eq("StudentNumber", (long)232));

4.添加sql查询条件(?为参数)

ICriteria c = session.CreateCriteria(typeof(Student));
 c.Add(Expression.Sql("2 = ?", 1, NHibernateUtil.Int32));

5.别名

ICriteria c = s.CreateCriteria(typeof(Animal), "a").AddOrder(Order.Asc("a.bodyWeight"));

6.分页

session.CreateCriteria<Student>().SetFirstResult(1).SetMaxResults(2)


简单写写就好

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2009-08-26 Spring.NET学习笔记(6)-基础AOP
点击右上角即可分享
微信分享提示