zoukankan      html  css  js  c++  java
  • 使用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);

    注意:数据增删改之后,如果开启了事务,需要提交事务,数据才会被持久化到数据库中。

  • 相关阅读:
    Oracle SQL语句大全—查看表空间
    Class to disable copy and assign constructor
    在moss上自己总结了点小经验。。高手可以飘过 转贴
    在MOSS中直接嵌入ASP.NET Page zt
    Project Web Access 2007自定义FORM验证登录实现 zt
    SharePoint Portal Server 2003 中的单一登录 zt
    vs2008 开发 MOSS 顺序工作流
    VS2008开发MOSS工作流几个需要注意的地方
    向MOSS页面中添加服务器端代码的另外一种方式 zt
    状态机工作流的 SpecialPermissions
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/3652099.html
Copyright © 2011-2022 走看看