出自:http://www.cnblogs.com/guyoung/archive/2011/10/22/A024-MVCQuick.html
NHibernate.Linq
在.NET Framework 3.5中提供了LINQ 支持后,Linq的呼声一度很高,各种LINQ Provider更是满天飞。他能够将数据查询语句集成到编程语言中,以一种统一的方式操作各种数据源,减少数据访问的复杂性。而LINQ本身也提供了很 好的扩展性,使开发人员可以轻松地编写属于自己的LINQ Provider。
在NHibernate 3.0.0 之前版本中并不存在Linq功能,Ayende Rahien贡献者为NHibernate2.1.0GA和NHibernate2.1.2GA版本设计第三方NHiberante.Linq.dll(对应为NHibernate.Linq-1.0.0.GA-bin.zip和NHibernate.Linq-2.1.2-GA-Bin.zip)(目前已经停止了维护),它是基于Criteria API的Linq Provider,主要功能是将简单的Linq表达式转化为Criteria API,由于Criteria API的功能有限,所以存在很多天生的不足(联接和子查询不支持)。如果使用NHibernate2.1.0GA或者NHibernate2.1.2GA版本可以下载使用NHiberante.Linq.dll,
自NHibernate 3.0.0版本开始,NHibernate Query方式新增了Linq支持查询方式。
NHibernate 3.x 的 NHibernate.Linq时基于HQL AST分析器的Linq Provider,由Steve Strong贡献者开发的,底层使用第三方Re-Linq开源框架。
NHibernate Linq Provider
实现过程:
NHibernate.Linq.LinqExtensionMethods类
public static class LinqExtensionMethods { public static IQueryable<T> Query<T>(this ISession session) { return new NhQueryable<T>(session.GetSessionImplementation()); } ...... }
使用LINQ重构Repository 出自http://www.cnblogs.com/guyoung/archive/2011/10/23/A025-MVCQuick.html