使用NHibernate(5)-- Linq To NHibernate
Linq是NHibernate所支持的查询语言之一,对于Linq的实现在源码的src/Linq目录下。以下是一个使用Linq进行查询数据的示例:
var users = session.Query<User>().where(n=>n.Id=5).OrderBy(n=>n.Name).ToList();
session在我们跑起来的第一个程序的Controller中已经介绍过了,它是查询数据库的入口;通过调用其泛型方法Query,可以拿到相应的集合,然后通过where方法进行条件过滤,通过OrderBy进行排序;注意到此为止,NHibernate并没有去查询数据库,而是调用ToList的方法的时候才去访问数据库,这就是延迟查询,即用到某个数据的时候NHi才回去查询。对于延迟查询的使用和原理分析,打算后面再讨论。
Nhibernate3.3对Linq的支持已经非常好了,实现了几乎所有的Linq接口,下面是Linq to Nhibernate 所支持的方法:
聚合方法:
Count、Sum 、Min、Max、Average
转换方法:
ToArray, ToList, ToDictionary, OfType
单个查询:
First, FirstOrDefault, ElementAt
生成:
Range,Repeat
分组:
GroupBy
连接:
Cross, Group, Left Outer
排序:
OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse
分区查询:
Take,Skip,TakeWhile,SkipWhile
投影运算符:
Select ,SelectMany
限量运算:
Select ,SelectMany
条件:
Where
集合:
Distinct, Union, Intersect, Except
下面演示如何通过Linq to NHibernate进行分页查询:
var count = session.Query<User>().Count();
var users = session.Query<User>().OrderBy(n=>n.name).Skip((pageIndex-1)*pageSize).Take(pageSize).ToList();
首先对用户进行排序,然后跳过(pageIndex-1)*pageSize条数据,最后Take。
上述代码会和数据库有两次交互,第一次是查询总数即count ,第二次是查询分页数据。如果想在一次交互中执行上述两条sql,则可以用NHibernate特有的Futre查询,代码修改如下:
var count = session.Query<User>().Count().ToFuture();
var users = session.Query<User>().OrderBy(n=>n.name).Skip((pageIndex-1)*pageSize).Take(pageSize).ToFuture().ToList();
虽然数据的增删改跟Linq无关,但也打算在这里提一下,感觉这样就可以进行CRUD了。
插入数据:
User user = new User(){Name="FuzhePan"};
session.Save(user );
保存后,user的主键就已经有值了。
修改数据:
Session.Update(user);
删除数据:
Session.Delete(user);
注意:数据增删改之后,如果开启了事务,需要提交事务,数据才会被持久化到数据库中。
使用NHibernate(5)-- Linq To NHibernate的更多相关文章
- Linq To Nhibernate 性能优化(入门级)
最近都是在用Nhibernate和数据库打交道,说实话的,我觉得Nhibernate比Ado.Net更好用,但是在对于一些复杂的查询Nhibernate还是比不上Ado.Net.废话不多说了,下面讲讲 ...
- Linq to NHibernate入门示例
Linq to NHibernate入门示例 NHibernate相关: 09-08-25连贯NHibernate正式发布1.0候选版 09-08-17NHibernate中一对一关联的延迟加载 09 ...
- linq to NHibernate
什么是linq to NHibernate 什么是linq to NHibernate?说简单一点就是linq + NHibernate. linq语句是.Net 3.5中新增的功能,从问世以来就 ...
- NHibernate 数据查询之Linq to NHibernate
刚学NHibernate的时候觉得,HQL挺好用的,但是终归没有与其他技术相关联,只有NHibernate用到,一来容易忘记,二来没有智能提示,排除错误什么的都不给力,直到看到一个同事用Linq to ...
- NHibernate Session-per-request and MiniProfiler.NHibernate
NHibernate Session-per-request and MiniProfiler.NHibernate 前言 1.本文以mvc3为例,借鉴开源项目 NerdDnner项目完成nhiber ...
- JQGrid+Nhibernate+Webservice+Linq
先上效果图: 前台代码(jqgridtest.aspx): <%@ Page Language="C#" AutoEventWireup="true" ...
- [NHibernate]利用LINQPad查看NHibernate生成SQL语句
上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...
- NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)
摘要 NHibernate从3.0开始支持Linq查询.写Linq to NHibernate查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询.这篇文章使用Linq to NH ...
- NHibernate Linq查询 扩展增强 (第九篇)
在上一篇的Linq to NHibernate的介绍当中,全部是namespace NHibernate命名空间中的IQueryOver<TRoot, TSubType>接口提供的.IQu ...
随机推荐
- UVaLive 4128 Steam Roller (多决策最短路)
题意:给定一个图,r 根横线, c 根竖线.告诉你起点和终点,然后从起点走,每条边有权值,如果是0,就表示无法通行.走的规则是:如果你在下个路要转弯,会使这段路的时间加倍,但是如果一条路同时是这样,那 ...
- leetcode-8-String to Integer (atoi) (已总结)
8. String to Integer (atoi) Total Accepted: 93917 Total Submissions: 699588 Difficulty: Easy Impleme ...
- C#泛型使用小记
最近C#的泛型使用频次略多,特在此记下一个印象深刻的. 情景如下, 基类BaseClass 有一系列的子类 SubClass1, SubClass2, SubClass3... 且其构造函数的参数较多 ...
- Hadoop map任务数量的计算
Hadoop中决定map个数的的因素有几个,由于版本的不同,决定因素也不一样,掌握这些因素对了解hadoop分片的划分有很大帮助, 并且对优化hadoop性能也很有大的益处. 旧API中getSpli ...
- 查看jar包的jdk版本并降级
用解压工具打开jar包(例子都是用7zip) 进入到META-INF目录,查看MANIFEST.MF文件,查看Bulid-Jdk,下图就为1.7.0_55版本的JDK,这就表示jetty-serv ...
- [C#学习笔记]Func委托与Action委托
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...
- asp.net mvc全局异常捕获
通过重写OnException方法形式实现. 1.自定义异常记录类并继承HandleErrorAttribute类. public class HandlerErrorAttribute : Hand ...
- 3、Orcal表空间分配、新建用户、新用户创建连接
1.创建表空间: 在管理员连接打开sql面板,输入如下内容: CREATE TABLESPACE DXYX DATAFILE 'E:\app\Administrator\product\11.2.0\ ...
- 201621123023《Java程序设计》第11周学习总结
一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 二.书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallRun ...
- “全栈2019”22篇Java异常学习资料及总结
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"22篇Ja ...