NHibernate中的IQueryable和IQueryover
今天在做一个小项目时,用到了NHibernate,使用了模糊查询(Like),在后台用IQueryable去接收Session.Query<T>()的查询结果。
代码如下:
/// <summary>
/// 获取所有记录
/// </summary>
/// <returns></returns>
public virtual IQueryable<T> LoadAll()
{
var result = Session.Query<T>();
return result;
}
在BLL层想用NHibernate的Where去做模糊查询,查了好多资料可以有两种方式:
第一种:
.Where(Restrictions.On<Cat>(c => c.Name).IsLike("%anna%"))
第二种:
.WhereRestrictionOn(c => c.Name).IsLike("%anna%")
然后调用 base.LoadAll(),但是 base.LoadAll()后面的WhereRestrictionOn怎么也出不来,郁闷!!
在再试第一种方式,也不对。。。
休息一会,回来再看,原来底层函数的返回值是IQueryable,不是IQueryover。
IQueryover:是NHibernate类库中的一个接口,可以使用QueryOver查询。
IQueryable:是Linq中的一个接口,与NHibernate无关。
最后修改为Linq的语法Where(n=>n.Name.Contains(name))(原来这么简单!):
/// <summary>
/// 获取用户
/// </summary>
/// <param name="count">总数</param>
/// <param name="pageIndex">页索引</param>
/// <param name="pageSize">页记录数</param>
/// <param name="name">搜索条件:用户名</param>
/// <returns></returns>
public IQueryable<User> LoadUserByName(out long count, int pageIndex, int pageSize, string name)
{
var result = base.LoadAll().Where(n=>n.Name.Contains(name));
count = result.LongCount(); return result.Skip((pageIndex - ) * pageSize).Take(pageSize);
}
查看生成的SQL语句:
2014-01-14 15:07:28,155 [] INFO NHibernate.Loader.Loader [(null)] <(null)> - select cast(count(*) as INTEGER) as col_0_0_ from T_User user0_ where user0_.Name like ('%'||@p0||'%')
2014-01-14 15:07:28,159 [] INFO NHibernate.Hql.Ast.ANTLR.Tree.FromElement [(null)] <(null)> - handling property dereference [DomainModel.User (n) -> Name (Class)]
2014-01-14 15:07:28,160 [] INFO NHibernate.Loader.Loader [(null)] <(null)> - select user0_.UserId as UserId0_, user0_.Name as Name0_, user0_.Password as Password0_, user0_.Telephone as Telephone0_, user0_.Email as Email0_, user0_.IsDeleted as IsDeleted0_ from T_User user0_ where user0_.Name like ('%'||@p0||'%') limit 10
总结:
1.没有对NHibernate的查询理解透;
2.对Linq的语法也不熟悉;
此处写下来,留作备注,下次参考。
NHibernate中的IQueryable和IQueryover的更多相关文章
- NHibernate中,查询SqlServer数据库多个实体对象
关于datetime类型使用: Oracle: "and tb.EffectiveDate >= to_date(?,'yyyy-mm')" Sql: "an ...
- NHibernate 中删除数据的几种方法
今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...
- NHibernate 中使用 nvarchar(max) 类型
在 NHibernate 中使用字符串类型,默认会映射到字符类型,在 SQLServer 中,NVARCHAR 类型最大长度是 4000 字符,如果超过 4000,比如使用 SQL Server 中的 ...
- Nhibernate中 Many-To-One 中lazy="proxy" 延迟不起作用的原因
2010-07-15 12:10 by 彭白洋, 322 阅读, 0 评论, 收藏, 编辑 NHibernate中 Many-To-One 中lazy="proxy" 延迟不起作用 ...
- [转]NHibernate之旅(7):初探NHibernate中的并发控制
本节内容 什么是并发控制? 悲观并发控制(Pessimistic Concurrency) 乐观并发控制(Optimistic Concurrency) NHibernate支持乐观并发控制 实例分析 ...
- [转]NHibernate之旅(6):探索NHibernate中的事务
本节内容 事务概述 1.新建对象 [测试成功提交] [测试失败回滚] 2.删除对象 3.更新对象 4.保存更新对象 结语 上一篇我们介绍了NHibernate中的Insert, Update, Del ...
- 为什么Nhibernate中属性和方法必须Virtual的
如果你曾经用过NHibernate 2.0或者更高的版本,那您一定碰到过下面的错误:NHibernate.InvalidProxyTypeException: The following types ...
- 总结NHibernate 中删除数据的几种方法
今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...
- NHibernate中使用memcache二级缓存
在NHibernate中使用memcache二级缓存 一.Windows下安装Memcache 1. 下载 http://jehiah.cz/projects/memcached-win32/ ...
随机推荐
- 安装Intel CPU的Android模拟器
1. 用Android SDK Manager安装Extras/Intel x86 Emulator Accelarator(HAXM) 2. 用Android SDK Manager安装Androi ...
- SAE网站搭建(1)
用了半天时间,把Django的基本结构同步到SAE上了,里边比较麻烦的地方如下: 1. 数据库的同步; SAE用的是SQL数据库,默认使用下面的用户名.密码等变量(SAE为我们做了很多工作) 首先需要 ...
- 【原】Spark不同运行模式下资源分配源码解读
版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Task的提交源码解读 http://www.cnblogs.com/yourarebest/p/5423906.html Sch ...
- Linux设备驱动中的异步通知与异步I/O
异步通知概念: 异步通知的意识是,一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步IO”,信号是在软件层次 ...
- Duff and Weight Lifting - 587A
题目大意:某个人训练举重,他每次可以举起来2^wi的重量,不过这个人比较懒所以他想尽量减少训练的次数,如果所有的训练重量2^a1 +2^a2+....2^ak = 2^x,那么这些重量可以一次性训练( ...
- hdoj 1406 完数
完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- 【Mysql学习笔记】浅析mysql的binlog
最近读一份关于“数据库事务故障恢复"的技术资料,发现对mysql的binlog的认识不够清楚,查阅mysql reference manual有所收获,作为笔记,记录于此. 1. What' ...
- 服务框架HSF分析之一容器启动
大家平时都在用这个服务框架.简单阅读了下代码,了解其原理可以方便解决一些常见hsf的问题.限于篇幅,整个分析将分几个系列发布.第一篇将简单介绍Hsf的启动和各组件之间关系. 一. Hsf总体架构 这 ...
- mvc:annotation-driven' must have no character or element问题
使用SpringMVC,启动tomcat报这个错误 解决办法 首先将Spring版本提升到3.1及以上 如果还不行替换xml文件头部: <?xml version="1.0" ...
- WPF 多线程
写法3 private void button1_Click(object sender, RoutedEventArgs e) { System. ...