成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linq to SQL體系結構分析

開發 后端
這里介紹Linq to SQL體系結構,LINQ,語言集成查詢,就是把一些查詢操作集成到語言中(貌似是廢話),比如查詢關系數據庫,而且提供一種一致的操作方式,不管最終的數據存儲在哪里?

在向大家詳細介紹Linq的整體框架之前,首先讓大家了解下Linq to SQL體系結構,然后全面介紹Linq的整體框架。

LINQ,語言集成查詢,就是把一些查詢操作集成到語言中(貌似是廢話),比如查詢關系數據庫,而且提供一種一致的操作方式,不管最終的數據存儲在哪里?內存中,遠程數據庫還是一Xml格式文件存儲,不僅僅如此,你還可以用你豐富的想象力擴充自己的查詢。Linq to SQL無疑把Linq的能量發揮的***,我們就以Linq to SQL體系結構來學習一下Linq的整體框架。

在上兩章里面我們通過源代碼探討了關于DataContext的初始化和Table<TEntity>對象的獲取,以及Provider的初始化。今天我們來看看Linq to SQL執行的大至流程

假如我們寫下這樣的代碼:

  1. DataContext dbCtx = new DataContext("server=localhost;database=cnblogs;user id=sa;pwd=sa");  
  2. Table<Post> posts = dbCtx.GetTable<Post>();  
  3. foreach (Post p in posts)  
  4. {  
  5. Console.WriteLine(p.Title);  

在幕后到底發生了什么呢?

看到foreach代碼大家肯定都知道這個Table<Post>肯定實現了IEnumerable<Post>接口,這里的foreach的代碼和下面這個代碼的效果是一樣的,實際上最終也是轉換成這樣的代碼:

  1. IEnumerator<Post> iterator = posts.GetEnumerator();  
  2. while (iterator.MoveNext())  
  3. {  
  4. Post p = iterator.Current;  
  5. Console.WriteLine(p.Title);  

在***個式子編譯的時候后面的表達式實際上會被轉換為一個匿名方法,IsTrue也就是一個“方法的指針”,和我們已經熟識的委托沒有什么區別。而第二個式子在執行的時候右邊的表達式會被編譯為一個樹的數據結構(C#編譯器實際上為我們做了詞法分析、語法分析了,在編譯原理里前兩個階段就是詞法分析和語法分析,詞法分析首先遍歷傳入的語言字符串,在我們這里就是x=>x==5,詞法分析器讀取每個字符,識別出標識符,常量,關鍵字,運算符,詞法分析器的產出是Token(符號);然后語法分析器根據該語言的語法范式將Token組織成一個樹形結構,用這個樹形的結構來表示該語言的代碼文件,在我們這里x=>x==5就是Lambda表達式這門“語言”的語句了,Expression就是那個樹)。Expression是一個遞歸形式的定義,它有兩個屬性:Parameters,這個屬性就是Lambda表達式的參數,在上面的代碼中就是:x,它還有一個屬性是Body,Body也是一個Expression類型,從這里我們看到Expression是這樣遞歸下去的。

通過上面的介紹,實際上Queryable中的那些擴展方法所接受的Lambda表達式***被編譯為樹數據結構。這些樹數據結構攜帶有查詢表達式的語法,但是最終它們要查詢什么樣的數據,是數據庫?還是XML或是Web Service就要靠IQueryProvider來解析了,從這里我們大概可以看到這樣一個結構:

Linq to SQL體系結構
看到這個圖,那我們有幾種擴展Linq的方式呢?

***種:通過給IEnumerable或IQueryable添加擴展方法,這個就是利用C#語言的特性來達到的。我將這種擴展稱之為橫向的擴展。

第二種:自己實現IQueryProvider,這種擴展就是縱向的擴展了,提供自己的Provider,然后這個Provider解析表達式樹生成最終具體的查詢操作。

小結

本文簡單的展示一下Linq to SQL體系結構,了解一下Linq的擴展點在哪里,從這里我們也能看到,要做一個好擴展的系統,一個很重要的任務就是提煉接口,接口的粒度,接口的職責等等都是核心關注點。使用接口將幾個類隔離,變化點也就封裝起來了。

【編輯推薦】

  1. LINQ查詢操作經驗總結
  2. LINQ遍歷多個數組深入剖析
  3. Linq查詢Access數據文件淺談
  4. LINQ構建框架設計學習筆記
  5. LINQ重要組成部分簡介
責任編輯:佚名 來源: 博客園
相關推薦

2009-09-11 10:38:03

LINQ體系結構

2009-02-05 11:07:27

Sybase SQL SybaseSQL Server

2009-12-21 14:37:14

2010-10-20 17:26:26

SQLServer線程

2012-02-06 17:22:44

MySQL

2009-07-15 13:46:26

Swing體系結構

2014-07-23 09:33:52

2009-06-26 15:58:28

EJB

2009-07-10 16:07:10

TikeSwing創建MVC體系結構

2010-04-23 09:13:05

Oracle體系結構

2010-08-16 12:54:21

ASON路由技術

2010-09-25 13:38:23

Inside JVM

2016-12-26 10:29:01

Spring框架結構

2010-06-21 14:51:14

ASON路由

2009-09-08 13:16:01

Linq to SQL

2010-02-23 16:07:39

2010-09-16 14:36:43

Java虛擬機

2017-08-03 14:01:07

大數據深度學習體系結構

2023-07-04 15:00:47

微服務架構開發

2010-01-26 16:54:09

核心交換機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九九久久国产免费 | 欧美一区在线视频 | 国产一区二区黑人欧美xxxx | 亚洲国产中文字幕 | 亚洲毛片 | 国产精品一区二区久久精品爱微奶 | av在线电影网站 | 91一区二区三区在线观看 | 国产精品日日做人人爱 | 韩日一区| 中文字幕成人免费视频 | 亚洲一区国产精品 | 国产永久免费 | 在线高清免费观看视频 | 青青草av| 国产精品久久 | 亚洲天堂一区二区 | 欧美久久久久 | 91精品国产91综合久久蜜臀 | 成人影院在线 | 国产亚洲第一页 | 999久久久久久久久6666 | 久久久青草婷婷精品综合日韩 | 性福视频在线观看 | 日韩欧美国产精品一区 | 中文字幕亚洲一区二区三区 | 国产精品视频免费 | 国产欧美一区二区久久性色99 | 免费成人高清在线视频 | 日韩伦理一区二区三区 | 蜜桃在线播放 | 国产精品一区一区 | 亚洲精品一区二区三区中文字幕 | 妞干网视频 | 成人片免费看 | 日韩午夜| 午夜电影网址 | 91电影院| 欧美一区二区三区久久精品 | 成人久久久 | 91亚洲国产亚洲国产 |