zoukankan      html  css  js  c++  java
  • NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)

    摘要

    NHibernate从3.0开始支持Linq查询。写Linq to NHibernate查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询。这篇文章使用Linq to NHibernate重写之前所有的查询。

    本篇文章的代码可以到NHibernate查询下载

    1、创建IQueryable对象,返回所有Customer对象信息

    1         public IList<Customer> QueryAllLinq()
    2         {
    3             return Session.Query<Customer>().ToList();
    4         }
    • 要在代码中添加对NHibernate.Linq的引用
    • IQueryable对象是延迟加载的
    • ToList方法表示立即执行,得到IList<Customer>集合

    2、创建别名

    1         public IList<Customer> QueryAllLinq()
    2         {
    3             return (from c in Session.Query<Customer>().ToList() select c).ToList();
    4         }

    3、指定对象返回数组

    1         public IList<int> SelectIdLinq()
    2         {
    3             var query = Session.Query<Customer>().Select(c => c.Id).Distinct().ToList();
    4             return query.ToList();
    5         }

    Distinct方法返回无重复项目的序列。

    4、添加查询条件

     1         public IList<Customer> GetCustomerByNameLinq(string firstName, string lastName)
     2         {
     3             return Session.Query<Customer>().Where(c => c.FirstName == firstName && c.LastName == lastName).ToList();
     4         }
     5 
     6         public IList<Customer> GetCustomersStartWithLinq()
     7         {
     8             var query = from c in Session.Query<Customer>() where c.FirstName.StartsWith("J") select c;
     9             return query.ToList();
    10         }

    5、order by

    1         public IList<Customer> GetCustomersOrderByLinq()
    2         {
    3             var query = from c in Session.Query<Customer>() orderby c.FirstName ascending select c;
    4             return query.ToList();
    5         }

    6、关联查询

     1         public IList<OrderCount> SelectOrderCountLinq()
     2         {
     3             var query = Session.Query<Customer>().Select(g => new OrderCount { CustomerId = g.Id, Count = g.Orders.Count() });
     4             return query.ToList();
     5         }
     6 
     7         public IList<Customer> GetCustomersOrderCountGreaterThanLinq()
     8         {
     9             var query = Session.Query<Customer>().Where(c => c.Orders.Count > 2);
    10             return query.ToList();
    11         }
    12 
    13         public IList<Customer> GetCustomersOrderDateGreatThanLinq(DateTime orderDate)
    14         {
    15             var query = Session.Query<Customer>().Where(c => c.Orders.Any(o => o.Ordered > orderDate));
    16             return query.ToList();
    17         }

    因为.net方法不能返回匿名类对象以及含有匿名类对象的对象,因此添加OrderCount类,SelectOrderCountLinq方法返回IList<OrderCount>对象。

    1     public class OrderCount
    2     {
    3         public int CustomerId { get; set; }
    4         public int Count { get; set; }
    5     }

    结语

    Linq to NHibernate基于.net Linq,非常灵活。.net Linq提供的所有集合操作,Linq to NHibernate也都提供了。使用它可以完成大部分NHibernate查询。下一篇文章介绍NHibernate 3.2的Query Over查询。

  • 相关阅读:
    网站图片上传,水印,预览,截图
    go语言中的数组切片:特立独行的可变数组
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
    MongoDB删除文档
    顺为资本CEO许达来:为什么说中国创业者很幸福?(附PPT)
    星瀚资本杨歌:我七次创业失败的内心感悟(比较真实,可以看看创业的36条军规)
    晨兴资本刘芹:入行16年我才刚理解创投,有8个最深感悟
    20 个免费开源的 CSS3 用户界面工具包
    Google浏览器的缓存文件过大(mega网站导致的)
    FastSocket客户端/服务端通讯示例
  • 原文地址:https://www.cnblogs.com/uncle_danny/p/5676263.html
Copyright © 2011-2022 走看看