NHibernate Step By Step(9)-条件查询(Criteria Queries)
2010-08-26 23:57 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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-08-26 Spring.NET学习笔记(6)-基础AOP