如何更简单实现自定义LINQ提供器

工欲善其事,必先利其器。这个道理不论是传统的制造业还是如今的软件开发业,都是放之于四海皆准的道理。就拿自定义LINQ提供器来说吧,如今的发展也是如新月异。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、虚拟空间、营销软件、网站建设、德钦网站维护、网站推广。

随着.NET 3.5的正式发布,自定义LINQ提供器的实现如雨后春笋般不断涌现。而要开发自己的自定义LINQ提供器还是需要花费一定的精力的,但Mehfuz Hossain通过他的开源项目——LinqExtender,让大家可以轻松的开发自己的自定义LINQ提供器。

Mehfuz Hossain在他的LinqExtender介绍文章中,对LinqExtender作了这样的介绍:

LinqExtender暴露了如下这样一个模型,让开发人员当创建一个自定义提供器的只用关注于应用程序逻辑,而不是查询的内部机理。它位于自定义LINQ框架和自定义提供器之间。

LinqExtender帮助我们完成了大量表达式解析和处理的工作,这样,我们无需借助Reflection这样的函数库就能实现自己的自定义LINQ提供器。

LinqExtender主要提供了2个基类来帮助开发自定义LINQ提供器:QueryObjectBase和Query。

Mehfuz Hossain为了介绍LinqExtender的用法,还给出了一个简单自定义LINQ提供器实现——OpenLinqToSql。OpenLinqToSql的基本实现如下:

实体类需要继承于QueryObjectBase基类:

 
 
 
  1. class Book : QueryObjectBase  
  2.     {  
  3.         [LinqVisible, Identity]  
  4.         public int? Id { getset; }  
  5.         [LinqVisible]  
  6.         public string Author { getset; }    
  7.         [LinqVisible]  
  8.         public string Title { getset; }    
  9.         [LinqVisible]  
  10.         public string ISBN { getset; }    
  11.         [LinqVisible]  
  12.         public DateTime? LastUpdated {getset;}    
  13.         public override bool IsNew    
  14.         {  
  15.             get  
  16.             {  
  17.                 return Id == null;  
  18.             }  
  19.         }  
  20.     }

自定义LINQ提供器的核心类,需要继承于Query基类:

 
 
 
  1. public class SqlQuery : Query where T : QueryObjectBase  
  2. {  
  3. ....  
  4. ....  
  5. }

要实现对SQL的处理需要按照如下的逻辑进行编码:

  
  
  
  1. if (bucket.ItemsToTake != null)  
  2. {  
  3. // 1.Build Select statement using WITH    
  4. }  
  5. else 
  6. {  
  7. // 2.General select statement followed by order by , if any    
  8. }  
  9. // 3. Run query and fill IModify collection.


使用LinqExtender虽然可以帮助开发人员轻松的实现自己的自定义LINQ提供器,但是它还不那么成熟和完备,如目前的1.3版本缺乏对Group和Join等子句的支持;同时要求实体类继承于QueryObjectBase基类也是一个不小的弱点。

本文题目:如何更简单实现自定义LINQ提供器
转载源于:http://www.36103.cn/qtweb/news22/25372.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联