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);

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

  • 相关阅读:
    彻底弄懂GMT、UTC、时区和夏令时
    揭秘webpack loader
    揭秘webpack plugin
    封装axios
    webpack优化之玩转代码分割和公共代码提取
    node.js操作数据库之MongoDB+mongoose篇
    GitHub项目徽标
    Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
    QNX Message Passing,一个让人头秃的 IPC BUG
    【百面】02_模型评估
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/3652099.html
Copyright © 2011-2022 走看看