NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)
摘要
NHibernate从3.0开始支持Linq查询。写Linq to NHibernate查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询。这篇文章使用Linq to NHibernate重写之前所有的查询。
本篇文章的代码可以到NHibernate查询下载
1、创建IQueryable对象,返回所有Customer对象信息
public IList<Customer> QueryAllLinq()
{
return Session.Query<Customer>().ToList();
}
- 要在代码中添加对NHibernate.Linq的引用
- IQueryable对象是延迟加载的
- ToList方法表示立即执行,得到IList<Customer>集合
2、创建别名
public IList<Customer> QueryAllLinq()
{
return (from c in Session.Query<Customer>().ToList() select c).ToList();
}
3、指定对象返回数组
public IList<int> SelectIdLinq()
{
var query = Session.Query<Customer>().Select(c => c.Id).Distinct().ToList();
return query.ToList();
}
Distinct方法返回无重复项目的序列。
4、添加查询条件
public IList<Customer> GetCustomerByNameLinq(string firstName, string lastName)
{
return Session.Query<Customer>().Where(c => c.FirstName == firstName && c.LastName == lastName).ToList();
} public IList<Customer> GetCustomersStartWithLinq()
{
var query = from c in Session.Query<Customer>() where c.FirstName.StartsWith("J") select c;
return query.ToList();
}
5、order by
public IList<Customer> GetCustomersOrderByLinq()
{
var query = from c in Session.Query<Customer>() orderby c.FirstName ascending select c;
return query.ToList();
}
6、关联查询
public IList<OrderCount> SelectOrderCountLinq()
{
var query = Session.Query<Customer>().Select(g => new OrderCount { CustomerId = g.Id, Count = g.Orders.Count() });
return query.ToList();
} public IList<Customer> GetCustomersOrderCountGreaterThanLinq()
{
var query = Session.Query<Customer>().Where(c => c.Orders.Count > );
return query.ToList();
} public IList<Customer> GetCustomersOrderDateGreatThanLinq(DateTime orderDate)
{
var query = Session.Query<Customer>().Where(c => c.Orders.Any(o => o.Ordered > orderDate));
return query.ToList();
}
因为.net方法不能返回匿名类对象以及含有匿名类对象的对象,因此添加OrderCount类,SelectOrderCountLinq方法返回IList<OrderCount>对象。
public class OrderCount
{
public int CustomerId { get; set; }
public int Count { get; set; }
}
结语
Linq to NHibernate基于.net Linq,非常灵活。.net Linq提供的所有集合操作,Linq to NHibernate也都提供了。使用它可以完成大部分NHibernate查询。下一篇文章介绍NHibernate 3.2的Query Over查询。
NHibernate系列文章二十四:NHibernate查询之Linq查询(附程序下载)的更多相关文章
- NHibernate系列文章二十:NHibernate关系之一对一(附程序下载)
摘要 NHibernate一对一关系虽然不经常碰到,但是在对于数据库结构优化的时候,经常会碰到一对一关系.比如,产品详细信息比较多的时候,可以把产品详细信息放到另一张表里面,Product主表只记录产 ...
- NHibernate系列文章二十五:NHibernate查询之Query Over查询(附程序下载)
摘要 这一篇文章介绍在NHibernate 3.2里引入的Query Over查询,Query Over查询跟Criteria查询类似.首先创建IQueryOver对象,然后通过调用该对象的API函数 ...
- NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)
摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...
- NHibernate系列文章二十六:NHibernate查询之SQL Query查询(附程序下载)
摘要 NHibernate在很早的版本就提供了SQL Query(原生SQL查询),对于很复杂的查询,如果使用其他的查询方式实现比较困难的时候,一般使用SQL Query.使用SQL Query是基于 ...
- NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)
摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...
- NHibernate系列文章二十七:NHibernate Mapping之Fluent Mapping基础(附程序下载)
摘要 从这一节起,介绍NHibernate Mapping的内容.前面文章都是使用的NHibernate XML Mapping.NHibernate XML Mapping是NHibernate最早 ...
- NHibernate系列文章二十八:NHibernate Mapping之Auto Mapping(附程序下载)
摘要 上一篇文章介绍了Fluent NHibernate基础知识.但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping.只需在代码中定义一些Conv ...
- NHibernate系列文章二:创建NHibernate工程
摘要 这篇文章介绍了如何创建一个简单的使用NHibernate的控制台应用程序,包括使用NuGet.简单的配置.单表映射.对NHibernate配置文件添加智能提示.使用ISessionFactory ...
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-ME ...
随机推荐
- js数组键入值push和 arr[]i]区别
push 和 arr[i] 遍历 var arr = new Array(); $(":check").each(function(i){if(this.checked==true ...
- JSON.stringify 在OA差旅中转换为字符串传给后端,(使用from表单的形式)
$('#bookForm').find('#formData').val(transInfo.fromData).end().submit(); 这里的val()中的transInfo.fromDat ...
- C# Marshal.GetActiveObject() 遭遇 HRESULT:0x800401E3 (MK_E_UNAVAILABLE))
解决办法: 勿以管理员权限运行Visual Studio
- eclipse配置c开发环境
// */ // ]]> eclipse配置c开发环境 1. eclipse配置c开发环境 1.1. 缘起 1.2. cygwin 1.3. eclipse 1.4. 配置 1 eclipse配 ...
- Javascript中变量提升的问题
一.函数声明变量提升 函数声明具有变量提升的问题,所以在函数被声明之前就可以访问. //else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法. / ...
- Android AChartEngine 饼图渐变效果
二话不说,先上图 核心代码如下: private void initLabelChat(View rootView) { NumberFormat nf = new DecimalFormat(&qu ...
- AMap行政区查询服务
AMap.DistrictSearch行政区查询服务插件,提供全国各省.市.县.区的中心点经纬度.行政区边界坐标组.下级行政区等信息.根据行政区边界坐标组可在地图上绘制行政区边界.(本文为原创,并在项 ...
- XF 文档 - Element Framework Doc
配置篇 Chapter Configuration Schema篇 Chapter Schema 查询篇 Chapter Querying Data 数据更改及验证篇 Chapter Data Mod ...
- iscroll4 捕捉元素开发手机焦点图滑动效果
html标准代码格式 <div id="wrapper"> <div id="scroller" > <ul id="t ...
- Mvc public virtual DbQuery<TResult> Include("")
参数 path 类型:System.String要在查询结果中返回的相关对象列表(以点号分隔). 返回值 类型:System.Data.Entity.Infrastructure.DbQuery< ...