自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何更簡單實現(xiàn)自定義LINQ提供器

開發(fā) 后端
本文介紹了實現(xiàn)自定義LINQ提供器所需要的一種工具——LinqExtender。這種工具是全開源的開發(fā)工具,為我們提供了大量的表達式和兩個幫助開發(fā)的基類。

工欲善其事,必先利其器。這個道理不論是傳統(tǒng)的制造業(yè)還是如今的軟件開發(fā)業(yè),都是放之于四海皆準的道理。就拿自定義LINQ提供器來說吧,如今的發(fā)展也是如新月異。

隨著.NET 3.5的正式發(fā)布,自定義LINQ提供器的實現(xiàn)如雨后春筍般不斷涌現(xiàn)。而要開發(fā)自己的自定義LINQ提供器還是需要花費一定的精力的,但Mehfuz Hossain通過他的開源項目——LinqExtender,讓大家可以輕松的開發(fā)自己的自定義LINQ提供器。

Mehfuz Hossain在他的LinqExtender介紹文章中,對LinqExtender作了這樣的介紹:

LinqExtender暴露了如下這樣一個模型,讓開發(fā)人員當創(chuàng)建一個自定義提供器的只用關注于應用程序邏輯,而不是查詢的內(nèi)部機理。它位于自定義LINQ框架和自定義提供器之間。

LinqExtender幫助我們完成了大量表達式解析和處理的工作,這樣,我們無需借助Reflection這樣的函數(shù)庫就能實現(xiàn)自己的自定義LINQ提供器。

LinqExtender主要提供了2個基類來幫助開發(fā)自定義LINQ提供器:QueryObjectBase和Query。

Mehfuz Hossain為了介紹LinqExtender的用法,還給出了一個簡單自定義LINQ提供器實現(xiàn)——OpenLinqToSql。OpenLinqToSql的基本實現(xiàn)如下:

實體類需要繼承于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. ....    

要實現(xiàn)對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雖然可以幫助開發(fā)人員輕松的實現(xiàn)自己的自定義LINQ提供器,但是它還不那么成熟和完備,如目前的1.3版本缺乏對Group和Join等子句的支持;同時要求實體類繼承于QueryObjectBase基類也是一個不小的弱點。

【編輯推薦】

  1. LINQ——語言級集成查詢?nèi)腴T指南
  2. LINQ查詢的目的與實現(xiàn)手段
  3. LINQ查詢表達式深入剖析
  4. 實例二:綁定到LINQ查詢的結(jié)果
  5. LINQ的演變及其對C#設計的影響
責任編輯:林琳 來源: 拼吾愛程序人生
相關推薦

2009-09-07 22:00:15

LINQ自定義

2009-09-07 21:25:59

Linq自定義

2015-01-14 15:06:48

定義相機

2025-03-05 10:49:32

2009-09-03 13:34:03

.NET自定義控件

2023-01-03 07:40:27

自定義滑塊組件

2013-01-10 09:36:19

NagiosNagios插件

2009-09-03 15:46:57

C#自定義事件

2009-11-25 14:36:39

PHP函數(shù)usort(

2021-03-16 10:39:29

SpringBoot參數(shù)解析器

2021-05-29 16:12:00

通信協(xié)議設備

2009-09-17 09:24:57

Linq實現(xiàn)分頁

2009-06-18 10:07:44

LINQ to ACC

2009-09-15 15:18:40

Linq連接查詢

2020-09-18 10:12:24

KotlinTCP網(wǎng)絡協(xié)議

2024-12-27 15:37:23

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2015-02-12 15:33:43

微信SDK

2022-12-07 08:56:27

SpringMVC核心組件

2013-01-09 17:22:38

Android開發(fā)Camera
點贊
收藏

51CTO技術(shù)棧公眾號