LINQ實戰指南

LINQ實戰指南

《LINQ實戰指南》是 2009 年 人民郵電出版社出版的圖書,作者是(法)Fabrice Marguerie (美) Steve Eichert (美)Jim Wooley 。

基本介紹

  • 中文名:LINQ實戰指南
  • 原書名:LINQ in Action
  • 出版社:人民郵電出版社
  • ISBN:9787115208514
基本信息,編輯推薦,內容簡介,目錄,前言,序言,媒體評論,

基本信息

原出版社: Manning Publications
作者:(法)Fabrice Marguerie (美) Steve Eichert (美)Jim Wooley 譯者:陳黎夫
叢書名: 圖靈程式設計叢書 C#與.NET系列
出版日期:2009 年8月
開本:16開
頁碼:416
版次:1-1

編輯推薦

微軟MVP嘔心瀝血之作,LINQ聖經.
深入全面,引人入勝.
豐富實例,兼顧C#和VB NET語言

內容簡介

linq是微軟 net軟體開發平台上的一項突破性創新技術,它在面向對象語言與各種數據源之間架設了一座高效的橋樑,大大降低了軟體開發的複雜度。
本書內容全面詳細,幾乎涵蓋了所有技術要點。對於linq提供的各種特性,從客觀的角度解釋其優缺點,使讀者能夠根據具體情況做出選擇。此外,還講解了 linq的可擴展性,可用於更高級的數據處理。全書組織結構合理,行文流暢,使讀者如同置身於一次技術旅行。在深入透徹的講解中恰到好處地運用實例,對同一主題分別給出c#和vb net實例,並在實例的關鍵點給出注釋,真正達到了化繁為簡的境界。
本書適合於使用c# 和vb net 的軟體開發者

目錄

第一部分 從這裡開始
第1章 linq簡介 2
1 1 linq是什麼 2
1 1 1 概覽 3
1 1 2 linq的功能 3
1 1 3 作為語言擴展的linq 4
1 2 為什麼需要linq 6
1 2 1 常見問題 6
1 2 2 解決理念上的失調 8
1 2 3 linq給出解決方案 12
1 3 linq的設計目標及起源 13
1 3 1 linq項目的設計目標 13
1 3 2 一點歷史 14
1 4 linq to objects初步:查詢記憶體中的集合 15
1 4 1 先決條件 15
1 4 2 hello linq to objects 17
1 5 linq to xml初步:查詢xml文檔 20
1 5 1 為什麼需要linq to xml 20
1 5 2 hello linq to xml 22
1 6 linq to sql初步:查詢關係型資料庫 26
1 6 1 linq to sql功能概覽 26
1 6 2 hello linq to sql 26
1 6 3 進一步了解linq to sql 30
1 7 小結 30
第2章 c#和vb語言的增強特性 31
2 1 新語言的增強特性一瞥 31
2 1 1 列出當前正在運行的所有進程 32
2 1 2 將返回結果封裝成類 33
2 2 隱式類型局部變數 34
2 2 1 語法 35
2 2 2 使用隱式類型局部變數改進實例程式 35
2 3 對象和集合的初始化器 37
2 3 1 引入對象初始化器的動機 37
2 3 2 集合初始化器 38
2 3 3 用對象初始化器改進實例程式 39
2 4 lambda表達式 40
2 4 1 委託回顧 40
2 4 2 匿名方法 42
2 4 3 lambda表達式介紹 42
2 5 擴展方法 47
2 5 1 創建擴展方法的示例 47
2 5 2 更多使用linq標準查詢操作符的例子 50
2 5 3 將擴展方法引入到實例程式中 51
2 5 4 注意事項 52
2 6 匿名類型 54
2 6 1 使用匿名類型組合數據 55
2 6 2 沒有名字的類型也是類型 55
2 6 3 使用匿名類型改進實例程式 56
2 6 4 匿名類型的限制 57
2 7 小結 58
第3章 linq構建塊 61
3 1 linq對 net的擴展 61
3 1 1 語言擴展回顧 61
3 1 2 構成linq基礎的核心元素 62
3 2 序列 63
3 2 1 ienumerable(t)接口 63
3 2 2 疊代器回顧 64
3 2 3 延遲查詢執行 66
3 3 查詢操作符 69
3 3 1 查詢操作符是什麼 69
3 3 2 標準查詢操作符 71
3 4 查詢表達式 72
3 4 1 查詢表達式是什麼 72
3 4 2 編寫查詢表達式 73
3 4 3 標準查詢操作符與查詢表達式的關係 75
3 4 4 限制 76
3 5 表達式樹 78
3 5 1 lambda表達式回顧 78
3 5 2 表達式樹是什麼 78
3 5 3 iqueryable,另一種實現延遲查詢執行的方法 81
3 6 linq的程式集以及命名空間 81
3 7 小結 83
第二部分 查詢記憶體中的對象
第4章 熟悉linq to objects 86
4 1 實例程式簡介 86
4 1 1 程式目標 86
4 1 2 程式功能 87
4 1 3 業務邏輯實體 87
4 1 4 資料庫架構 87
4 1 5 示例數據 89
4 2 用linq操作記憶體中的集合 90
4 2 1 能夠查詢什麼 90
4 2 2 支持的操作 94
4 3 在asp net和windows forms中使用linq 95
4 3 1 web應用程式中的數據綁定 95
4 3 2 windows forms應用程式中的數據綁定 100
4 4 常用的標準查詢操作符 103
4 4 1 約束操作符where 104
4 4 2 投影操作符 105
4 4 3 distinct操作符 107
4 4 4 轉換操作符 108
4 4 5 聚合操作符 109
4 5 用不同的方式顯示記憶體中的集合 110
4 5 1 排序 110
4 5 2 嵌套查詢 111
4 5 3 分組 113
4 5 4 使用連線 114
4 5 5 分區 117
4 6 小結 121
第5章 超越基本的記憶體數據查詢 122
5 1 常見使用場景 122
5 1 1 查詢非泛型集合 123
5 1 2 按照多個條件分組 125
5 1 3 動態查詢 127
5 1 4 linq to text files 135
5 2 設計模式 137
5 2 1 函式式創建模式 138
5 2 2 foreach模式 140
5 3 性能分析 142
5 3 1 選擇恰當的流操作方式 142
5 3 2 當心立即執行 144
5 3 3 linq to objects會降低代碼的性能嗎 146
5 3 4 使用linq to objects的代價 149
5 3 5 性能和簡潔:魚和熊掌不可兼得嗎 151
5 4 小結 152
第三部分 查詢關係型數據
第6章 linq to sql入門 156
6 1 走入linq to sql 157
6 1 1 創建對象映射 159
6 1 2 設定datacontext 161
6 2 通過linq to sql讀取數據 161
6 3 繼續改進查詢 165
6 3 1 過濾 165
6 3 2 排序和分組 167
6 3 3 聚集 168
6 3 4 連線 169
6 4 操作有層級關係的對象 171
6 5 數據載入的時機以及為何要關心這些 174
6 5 1 延遲載入 174
6 5 2 立即載入詳細信息 175
6 6 更新數據 177
6 7 小結 179
第7章 揭開linq to sql的本質 180
7 1 對象與關係數據的映射 180
7 1 1 通過在類中添加屬性 181
7 1 2 使用外部xml檔案實現映射 185
7 1 3 使用sqlmetal工具 186
7 1 4 linq to sql設計器 188
7 2 將查詢表達式轉換為sql 190
7 2 1 iqueryable接口 190
7 2 2 表達式樹 191
7 3 業務實體的生命周期 193
7 3 1 跟蹤變化 195
7 3 2 提交變化 196
7 3 3 操作離線數據 198
7 4 小結 200
第8章 linq to sql高級特性 201
8 1 處理並發修改 201
8 1 1 悲觀式並發 201
8 1 2 樂觀式並發 202
8 1 3 處理並發異常 204
8 1 4 使用事務解決衝突 207
8 2 高級的資料庫功能 208
8 2 1 使用sql語句直接得到結果對象 209
8 2 2 使用存儲過程 210
8 2 3 用戶自定義函式 217
8 3 改進業務邏輯層 220
8 3 1 預編譯的查詢 220
8 3 2 使用部分類實現自定義業務邏輯 221
8 3 3 使用部分方法 223
8 3 4 使用對象繼承 225
8 4 linq to entities簡介 229
8 5 小結 231
第四部分 操作xml
第9章 linq to xml入門 234
9 1 什麼是xml api 234
9 2 為什麼需要另外一種xml編程api 235
9 3 linq to xml設計原則 236
9 3 1 核心概念:函式式創建 238
9 3 2 核心概念:上下文無關的xml創建過程 238
9 3 3 核心概念:簡化了的名稱 239
9 4 linq to xml中相關類的繼承體系 241
9 5 在linq中操作xml 243
9 5 1 載入xml 243
9 5 2 解析xml 245
9 5 3 創建xml 246
9 5 4 使用visual basic xml字面量創建xml 249
9 5 5 創建xml文檔 251
9 5 6 向xml中添加內容 254
9 5 7 從xml中移除內容 255
9 5 8 更新xml的內容 256
9 5 9 操作屬性 258
9 5 10 保存xml 258
9 6 小結 259
第10章 使用linq to xml查詢並轉換xml 260
10 1 linq to xml軸方法 261
10 1 1 element 262
10 1 2 attribute 263
10 1 3 elements 264
10 1 4 descendants 264
10 1 5 ancestors 267
10 1 6 elementsafterself、nodes- afterself、elementsbefore-self和nodesbeforeself方法 268
10 1 7 visual basic的xml軸屬性 269
10 2 標準查詢操作符 271
10 2 1 使用select進行投影 273
10 2 2 使用where實現過濾 274
10 2 3 排序和分組 275
10 3 使用xpath查詢linq to xml對象 278
10 4 轉換xml 279
10 4 1 linq to xml轉換 279
10 4 2 使用xslt轉換linq to xml對象 282
10 5 小結 284
第11章 linq to xml常見場景 285
11 1 根據xml構建對象 285
11 1 1 目標 286
11 1 2 實現 287
11 2 根據對象創建xml 290
11 2 1 目標 290
11 2 2 實現 291
11 3 根據資料庫中的數據創建xml 295
11 3 1 目標 296
11 3 2 實現 297
11 4 過濾並混合從資料庫以及xml中得到的數據 301
11 4 1 目標 302
11 4 2 實現 302
11 5 讀取xml並更新資料庫 306
11 5 1 目標 306
11 5 2 實現 307
11 6 將文本檔案轉換為xml 319
11 6 1 目標 319
11 6 2 實現 320
11 7 小結 322
第五部分 linq無處不在
第12章 擴展linq 324
12 1 探尋linq的擴展機制 324
12 1 1 linq各個特性是如何實現的 325
12 1 2 自定義linq擴展能夠實現什麼 326
12 2 創建自定義查詢操作符 327
12 2 1 改進標準查詢操作符 327
12 2 2 輔助或領域相關的查詢操作符 330
12 3 基本查詢操作符的自定義實現 334
12 3 1 回顧查詢翻譯機制 334
12 3 2 查詢表達式模式的規範 335
12 3 3 示例1:跟蹤標準查詢操作符的執行過程 337
12 3 4 限制:查詢表達式衝突 338
12 3 5 示例2:非泛型的、領域相關的操作符 340
12 3 6 示例3:非序列的查詢操作符 342
12 4 查詢web服務:linq to amazon 343
12 4 1 linq to amazon介紹 344
12 4 2 需求 345
12 4 3 實現 346
12 5 iqueryable和iqueryprovider:linq to amazon高級版本 352
12 5 1 iqueryable和iqueryprovider接口 353
12 5 2 實現 356
12 5 3 究竟發生了什麼 357
12 6 小結 358
第13章 應用程式各層中的linq 359
13 1 linqbooks應用程式概覽 359
13 1 1 功能 359
13 1 2 程式ui概覽 360
13 1 3 數據模型 362
13 2 linq to sql及數據訪問層 362
13 2 1 回顧傳統的三層架構 362
13 2 2 用專門的數據訪問層還是linq to sql 364
13 2 3 linqbooks 中對linq to sql的使用 368
13 3 linq to xml的使用 374
13 3 1 從amazon中導入數據 374
13 3 2 生成rss 376
13 4 linq to dataset的使用 377
13 5 使用linq to objects 380
13 6 可擴展性 380
13 6 1 自定義查詢操作符 380
13 6 2 創建並使用自定義linq提供器 381
13 7 展望未來 381
13 7 1 自定義linq功能 382
13 7 2 linq to xsd:強類型的linq to xml 382
13 7 3 plinq:支持並行計算的linq 383
13 7 4 linq to entities,ado net entity framework的linq接口 383
13 8 小結 384
第14章 使用linq操作dataset 385
14 1 linq to dataset概覽 385
14 2 dataset回顧 386
14 2 1 dataset使用場景及功能 386
14 2 2 dataset是什麼 387
14 2 3 visual studio 2008和 net 3 5為支持linq to dataset進行的改進 389
14 3 查詢弱類型dataset 390
14 3 1 為dataset載入數據 390
14 3 2 不使用linq查詢dataset 394
14 3 3 使用linq to dataset查詢弱類型dataset 395
14 4 查詢強類型dataset 399
14 4 1 生成強類型的dataset 400
14 4 2 為強類型dataset載入數據 402
14 4 3 使用linq to dataset查詢強類型dataset 404
14 5 將linq to dataset查詢結果綁定至ui控制項 406
14 5 1 使用copytodatatable將linqto dataset查詢結果複製到datatable 406
14 5 2 使用asdataview實現雙向數據綁定 408
14 6 在linq to dataset中使用查詢操作符 410
14 6 1 用於datarow的field(t)和setfield(t)操作符 410
14 6 2 集合操作符以及用datarowcomparer比較datarow 411
14 7 小結 412
附錄 標準查詢操作符 414
譯者序
此刻您手中這本沉甸甸的書,雖然來得晚了一些,但仍舊是不可多得LINQ權威學習指南。
在最近一年的工作中,我會經常用到LINQ。毫不誇張地說,我無法想像再回到沒有LINQ的 NET日子會是怎樣,我深深地折服於其給每個開發人員帶來的方便和簡化——LINQ在程式世界和數據世界之間架起了一座橋樑。譯者序不是王婆賣瓜的地方,但在此我仍然忍不住要說,當讀者閱讀本書之後,相信在掩卷沉思時,你會知道將“不可能”變成“可能”也不過是瞬間的靈感,而又如此簡單。
In Action系列圖書(國內一般翻譯為“實戰”),從早期風靡國內的Ajax In Action 開始,很快成就了Manning出版社,也創出了它自己的風格。自然,包括本書在內的這一系列圖書講究實戰,但示例代碼和介紹文字之間的平衡卻拿捏得非常合適。沒有長篇累牘教科書一般的說教,也不會看到連續數頁的代碼僅僅用來演示“hello world”。每當你覺得有些不解的時候,一段精煉的示例代碼定會出現在眼前。而理解之後,接下來的轉折一筆又讓你欲罷不能,繼續深入閱讀。
作者Marguerie先生為此書花費了兩年的心血,相信朋友們在閱讀時能夠體會到行文中流露出來的良苦用心。本書原版的語言非常簡潔流暢,沒有絲毫浮華的賣弄,而力求用最平實的語言給出最恰如其分的介紹,所謂大音希聲,大象無形。作為本書的翻譯者,我在翻譯的過程中甚至無法控制繼續閱讀的想法,忍不住一氣通讀到底——就像是一篇情節曲折的小說,會莫名地猜出你的想法,牢牢地抓住你的心。
限於自身水平,譯本很多地方難免有所不足乃至錯誤,還望各位讀者不吝斧正。您可以通過電子郵件dflyingchen@gmail com與我聯繫,給出您的建議、意見和問題。
本書從開始翻譯到成稿,確有一年整時間,其中紛繁蕪擾,我冷暖自知,不必多言。只是感謝人民郵電出版社的各位朋友,你們對我放縱時的寬容,感激不盡。

前言

我之所以選擇軟體開發作為職業,是因為這是一個不斷發展變革的行業。總會有一些新的東西值得學習,因此你永遠都不會覺得厭倦。除了學習之外,我也對教授軟體開發技術非常感興趣。而撰寫本書,則既能夠學到東西,又可以分享我的心得。
在開始撰寫本書時,LINQ還僅僅是個早期的原型。本書隨著LINQ的不斷演化而數易其稿,我們也在不斷地探索和發現。探索和發現也正是軟體開發人員每天工作的一部分,我們必須緊緊跟上技術的腳步,並不停地學習新的東西。軟體開發環境的發展正變得越來越快,這種趨勢本身沒有任何改變的跡象。
NET同樣也是一個快速發展的技術。在最近的幾年中就發布了兩個主要的 NET Framework版本。伴隨著這兩個新版本的,還有一系列開發人員將會用到的新技術,例如WPF(Windows Presentation Foundation)、WCF(Windows Communication Foundation)、WF(Windows Workflow Foundation)、ASP NET AJAX、Silverlight和LINQ等。 NET的另外一個趨勢就是其支持的程式語言數量正在快速增加。例如將要在Visual Studio中和C#/VB NET並駕齊驅的F#語言,就將函式式編程的概念引入到了 NET領域。對於Python和Ruby之類的動態語言, NET也正在計畫通過動態語言運行時(Dynamic Language Runtime)來支持它們。
在接下來的幾年中,我們將會用到越來越多的程式語言。C#和Visual Basic等 NET語言的一大優勢就是其不停地根據需要進行著演化——最新版本的C#和Visual Basic就通過LINQ支持集成於語言的查詢功能。
除了為處理數據提供全新的方法之外,LINQ還代表了一種朝著聲明式以及函式式編程發展的轉變。當人們問我為什麼要學習LINQ時,我會告訴他們LINQ可以處理XML、關係型數據以及記憶體中的集合,更會提到LINQ還能幫助開發人員使用聲明式編程、延遲執行以及lambda表達式。
現在就開始你的LINQ之旅吧!你不但會看到這種新技術的使用方法,也會把握住程式語言的發展趨勢。本書的一個重要目標就是幫助你完整地理解LINQ所帶來的種種革命性的新概念。

序言

提筆為這本書寫序並不容易,不是因為回首望去,LINQ的開發歷程漫長而又千辛萬苦;也不是因為我此時此刻熱淚盈眶,心潮澎湃;也並非因為我必須字斟句酌地來總結這個傾注了我全部心血的產品。之所以說不容易,是因為這定會成為一本備受推崇的書,讓我很難揣摩出一個恰如其分的點睛之筆去形容它。
對我而言,LINQ項目早在發布任何官方訊息數年之前就已經悄然開始了,那時我正在參與一個新的託管ADO的計畫和架構設計。當時,幾個非常聰明的開發者非常大膽地建議,讓我們將那些傳統的數據訪問API統統扔掉,而是基於對象和元數據進行設計,因為元數據和對象是最新的運行時(即Java運行時)的基石。不過這個建議並沒有被採納——傳統的想法占據了上風,那時我也堅定地站在了傳統的一方。但由此我理解了數據應該處於任何編程系統的核心,而不僅僅是其附庸。有理由認為,在基於對象的系統中,應該讓數據也作為對象。不過,要實現這個理想,卻注定要經歷九九八十一難。
作為一名工程師,我時刻位於微軟公司各種新技術的風口浪尖上,我們要設計新的API、創造新的語言特性,帶動技術向前發展。雖然很多想法從未有機會變成最終的產品,但每次嘗試卻都是邁向正確方向時不可或缺的一步。LINQ正是這些努力、鬥爭以及教訓的最終結晶。它凝聚著團隊成員敏銳的洞察力和對計算機科學理論及技術的深入理解,而且若是缺少了Anders Hejlsberg的睿智與專注細節,LINQ也不可能成為現實。
當然,其中還有你們大家的努力。開發者社區在論壇和部落格上的討論對LINQ的成形產生了極為深遠的影響。能夠在開發的過程中就得到如此迅捷的反饋,不亞於在漆黑一片的房間中點起了一盞明燈。更讓人高興的是看到星星之火得以燎原,許多開發者逐步成長為專家、傳道者,開始做講座、寫文章,大家相互交流,彼此啟發。
這也正是此書的重要之處。Fabrice、Jim和Steve就是社區中的重要成員,他們在書中展示了LINQ技術的精華。這是一本來自民間、寫給民間的書,就像是舉辦一場所有人都將表演的LINQ派對一樣。
因此,快去享受這場狂歡吧,別再等我琢磨什麼點睛之筆了。
Matt Warren
微軟公司首席架構師

媒體評論

本書對你掌握LINQ的各種功能有很大的幫助。書中介紹了查詢操作符、Lambda表達式和表達式樹等,也提供了很多非常有用的代碼片段。特別是那些混合操作多種不同數據源的例子,極其實用!
——Gianni Giaccaglini,義大利電子和IT撰稿人
本書詳細介紹了LINQ技術,適合 NET平台上的每個開發人員閱讀。這本書能夠讓你領悟LINQ思想,而不僅僅停留在使用該工具查詢SQL或XML數據之上。要知道,LINQ能夠幫助你非常優雅地實現很多從前難以想像的工作。
——Golo Roden, NET以及相關領域作者、演講者、培訓師
用非常簡單的方式清楚地解釋了如此複雜的概念,令人讚嘆!
——Jose Rolando Guay Paz,CSW Solutions公司Web開發者
我將把本書放在案頭,隨時參閱。
——Joseph Guadagno,Southeast Valley NET用戶組創始人
本書將無可爭辯地成為LINQ的最權威教材。其中介紹了LINQ的歷史,分析了其長處和不足,說明了為何、何時及怎樣使用LINQ的各種技術。
——Carlos A Lone,瓜地馬拉 NET用戶組
毫無疑問,要想真正學會LINQ及其所有標準的提供器,這本書是最佳選擇。我在用戶組上的一次演講就參考了這本書的內容。絕對物超所值!
——Adam Wolf,Southeast Valley NET用戶組
本書最吸引我的地方就是,在每一節開始時,都會用簡潔易懂的示例演示最重要的功能。隨後拉開大幕,逐一解釋每條LINQ查詢和每個LINQ功能。
——Scott Mitchell,MSDN雜誌
最好的C#/LINQ圖書。
坦誠地說,若想開始學習LINQ及其使用方法和適用場景,那么這本書將是你的不二之選。
——Eggheadcafe com的讀者
我真的太喜歡這本書了。從 NET剛剛出現的那一刻起,我就期待著一種像LINQ這樣的技術。現在對象和關係型數據之間的壁壘終於被從容地打通,而這本書很好地展示了這一切。
——Leo Brown,軟體開發者
我無法掩飾對本書的喜愛,它不僅僅介紹了LINQ to SQL,對其框架的各種其他功能也都有深入介紹,能夠幫助你透徹理解LINQ的方方面面。

相關詞條

熱門詞條

聯絡我們