《LINQ實戰》是人民郵電出版社2009年出版的圖書,作者是(法國)(Marguerie.F.)馬格里(美國)(Eichert.S.)艾歇特(美國)(Wooley.J.)伍利。該書講述了作為.NET上連線程式語言和資料庫、記憶體對象、XML等各種類型數據之間的橋樑,LINQ引入了一種處理數據的全新理念,將查詢無縫集成至開發語言之上。
《LINQ實戰》第一部分介紹了LINQ技術及C#和VB為此提供的新語言特性,第二、三、四部分詳細介紹了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可擴展性、在應用程式中使用各種LINQ功能的方法以及LINQ to DataSet。《LINQ實戰》適合於使用C#和VB .NET的軟體開發者。
Fabrice Marguerie,微軟C#MVP,資深NET軟體架構師,LINQ社區專家。
Steve Eichert,資深程式設計師,擅長.NET與Ruby,有十多年編程經驗。
Jim Wooley,微軟MVP,LINQ社區專家。
本書作者是LINQ社區中的重要成員,他們在書中展示了這一技術的精髓……快去享受這一盛宴吧。
——Matt Warren,微軟主架構師,LINQ之父
LINQ方面的傑作!深入、全面、客觀,令人慾罷不能。強烈推薦!
——Patrick Smacchia,微軟MVP,《C#和.NET 2.0 實戰》作者
《LINQ實戰》:微軟MVP嘔心瀝血之作,LINQ聖經,深入全面,引人入勝,豐富實例,兼顧C#和VB .NET語言。《LINQ實戰》內容全面詳細,幾乎涵蓋了所有技術要點。對於LINQ提供的各種特性,從客觀的角度解釋其優缺點,使讀者能夠根據具體情況做出選擇。此外,還講解了LINQ的可擴展性,可用於更高級的數據處理。全書組織結構合理。行文流暢,使讀者如同置身於一次技術旅行。在深入透徹的講解中恰到好處地運用實例,對同一主題分別給出C#和VB.NIE實例,並在實例的關鍵點給出注釋,真正達到了化繁為簡的境界。
LINQ是微軟.NET軟體開發平台上的一項突破性創新技術,它在面向對象語言與各種數據源之間架設了一座高效的橋樑,大大降低了軟體開發的複雜度。
第一部分 從這裡開始
第1章 LINQ簡介
1.1 LINQ是什麼
1.1.1 概覽
1.1.2 LINQ的功能
1.1.3 作為語言擴展的LINQ
1.2 為什麼需要LINQ
1.2.1 常見問題
1.2.2 解決理念上的失調
1.2.3 LINQ給出解決方案
1.3 LINQ的設計目標及起源
1.3.1 LINQ項目的設計目標
1.3.2 一點歷史
1.4 LINQtoObjects初步:查詢記憶體中的集合
1.4.1 先決條件
1.4.2 HelloLINQtoObjects
1.5 LINQtoXML初步:查詢XML文檔
1.5.1 為什麼需要LINQtoXML
1.5.2 HelloLINQtoXML
1.6 LINQtoSQL初步:查詢關係型資料庫
1.6.1 LINQtoSQL功能概覽
1.6.2 HelloLINQtoSQL
1.6.3 進一步了解LINQtoSQL
1.7 小結
第2章 C#和VB語言的增強特性
2.1 新語言的增強特性一瞥
2.1.1 列出當前正在運行的所有進程
2.1.2 將返回結果封裝成類
2.2 隱式類型局部變數
2.2.1 語法
2.2.2 使用隱式類型局部變數改進實例程式
2.3 對象和集合的初始化器
2.3.1 引入對象初始化器的動機
2.3.2 集合初始化器
2.3.3 用對象初始化器改進實例程式
2.4 Lambda表達式
2.4.1 委託回顧
2.4.2 匿名方法
2.4.3 Lambda表達式介紹
2.5 擴展方法
2.5.1 創建擴展方法的示例
2.5.2 更多使用LINQ標準查詢操作符的例子
2.5.3 將擴展方法引入到實例程式中
2.5.4 注意事項
2.6 匿名類型
2.6.1 使用匿名類型組合數據
2.6.2 沒有名字的類型也是類型
2.6.3 使用匿名類型改進實例程式
2.6.4 匿名類型的限制
2.7 小結
第3章 LINQ構建塊
3.1 LINQ對.NET的擴展
3.1.1 語言擴展回顧
3.1.2 構成LINQ基礎的核心元素
3.2 序列
3.2.1 IEnumerable接口
3.2.2 疊代器回顧
3.2.3 延遲查詢執行
3.3 查詢操作符
3.3.1 查詢操作符是什麼
3.3.2 標準查詢操作符
3.4 查詢表達式
3.4.1 查詢表達式是什麼
3.4.2 編寫查詢表達式
3.4.3 標準查詢操作符與查詢表達式的關係
3.4.4 限制
3.5 表達式樹
3.5.1 Lambda表達式回顧
3.5.2 表達式樹是什麼
3.5.3 IQueryable,另一種實現延遲查詢執行的方法
3.6 LINQ的程式集以及命名空間
3.7 小結
第二部分 查詢記憶體中的對象
第4章 熟悉LINQtoObjects
4.1 實例程式簡介
4.1.1 程式目標
4.1.2 程式功能
4.1.3 業務邏輯實體
4.1.4 資料庫架構
4.1.5 示例數據
4.2 用LINQ操作記憶體中的集合
4.2.1 能夠查詢什麼
4.2.2 支持的操作
4.3 在ASP .NET和WindowsForms中使用LINQ
4.3.1 Web應用程式中的數據綁定
4.3.2 WindowsForms應用程式中的數據綁定
4.4 常用的標準查詢操作符
4.4.1 約束操作符Where
4.4.2 投影操作符
4.4.3 Distinct操作符
4.4.4 轉換操作符
4.4.5 聚合操作符
4.5 用不同的方式顯示記憶體中的集合
4.5.1 排序
4.5.2 嵌套查詢
4.5.3 分組
4.5.4 使用連線
4.5.5 分區
4.6 小結
第5章 超越基本的記憶體數據查詢
5.1 常見使用場景
5.1.1 查詢非泛型集合
5.1.2 按照多個條件分組
5.1.3 動態查詢
5.1.4 LINQtoTextFiles
5.2 設計模式
5.2.1 函式式創建模式
5.2.2 ForEach模式
5.3 性能分析
5.3.1 選擇恰當的流操作方式
5.3.2 當心立即執行
5.3.3 LINQtoObjects會降低代碼的性能嗎
5.3.4 使用LINQtoObjects的代價
5.3.5 性能和簡潔:魚和熊掌不可兼得嗎
5.4 小結
第三部分 查詢關係型數據
第6章 LINQtoSQL入門
6.1 走入LINQtoSQL
6.1.1 創建對象映射
6.1.2 設定DataContext
6.2 通過LINQtoSQL讀取數據
6.3 繼續改進查詢
6.3.1 過濾
6.3.2 排序和分組
6.3.3 聚集
6.3.4 連線
6.4 操作有層級關係的對象
6.5 數據載入的時機以及為何要關心這些
6.5.1 延遲載入
6.5.2 立即載入詳細信息
6.6 更新數據
6.7 小結
第7章 揭開LINQtoSQL的本質
7.1 對象與關係數據的映射
7.1.1 通過在類中添加屬性
7.1.2 使用外部XML檔案實現映射
7.1.3 使用SqlMetal工具
7.1.4 LINQtoSQL設計器
7.2 將查詢表達式轉換為SQL
7.2.1 IQueryable接口
7.2.2 表達式樹
7.3 業務實體的生命周期
7.3.1 跟蹤變化
7.3.2 提交變化
7.3.3 操作離線數據
7.4 小結
第8章 LINQtoSQL高級特性
8.1 處理並發修改
8.1.1 悲觀式並發
8.1.2 樂觀式並發
8.1.3 處理並發異常
8.1.4 使用事務解決衝突
8.2 高級的資料庫功能
8.2.1 使用SQL語句直接得到結果對象
8.2.2 使用存儲過程
8.2.3 用戶自定義函式
8.3 改進業務邏輯層
8.3.1 預編譯的查詢
8.3.2 使用部分類實現自定義業務邏輯
8.3.3 使用部分方法
8.3.4 使用對象繼承
8.4 LINQtoEntities簡介
8.5 小結
第四部分 操作XML
第9章 LINQtoXML入門
9.1 什麼是XMLAPI
9.2 為什麼需要另外一種XML編程API
9.3 LINQtoXML設計原則
9.3.1 核心概念:函式式創建
9.3.2 核心概念:上下文無關的XML創建過程
9.3.3 核心概念:簡化了的名稱
9.4 LINQtoXML中相關類的繼承體系
9.5 在LINQ中操作XML
9.5.1 載入XML
9.5.2 解析XML
9.5.3 創建XML
9.5.4 使用VisualBasicXML字面量創建XML
9.5.5 創建XML文檔
9.5.6 向XML中添加內容
9.5.7 從XML中移除內容
9.5.8 更新XML的內容
9.5.9 操作屬性
9.5.10 保存XML
9.6 小結
第10章 使用LINQtoXML查詢並轉換XML
10.1 LINQtoXML軸方法
10.1.1 Element
10.1.2 Attribute
10.1.3 Elements
10.1.4 Descendants
10.1.5 Ancestors
10.1.6 ElementsAfterSelf、NodesAfterSelf、ElementsBeforeSelf和NodesBeforeSelf方法
10.1.7 VisualBasic的XML軸屬性
10.2 標準查詢操作符
10.2.1 使用Select進行投影
10.2.2 使用Where實現過濾
10.2.3 排序和分組
10.3 使用XPath查詢LINQtoXML對象
10.4 轉換XML
10.4.1 LINQtoXML轉換
10.4.2 使用XSLT轉換LINQtoXML對象
10.5 小結
第11章 LINQtoXML常見場景
11.1 根據XML構建對象
11.1.1 目標
11.1.2 實現
11.2 根據對象創建XML
11.2.1 目標
11.2.2 實現
11.3 根據資料庫中的數據創建XML
11.3.1 目標
11.3.2 實現
11.4 過濾並混合從資料庫以及XML中得到的數據
11.4.1 目標
11.4.2 實現
11.5 讀取XML並更新資料庫
11.5.1 目標
11.5.2 實現
11.6 將文本檔案轉換為XML
11.6.1 目標
11.6.2 實現
11.7 小結
第五部分 LINQ無處不在
第12章 擴展LINQ
12.1 探尋LINQ的擴展機制
12.1.1 LINQ各個特性是如何實現的
12.1.2 自定義LINQ擴展能夠實現什麼
12.2 創建自定義查詢操作符
12.2.1 改進標準查詢操作符
12.2.2 輔助或領域相關的查詢操作符
12.3 基本查詢操作符的自定義實現
12.3.1 回顧查詢翻譯機制
12.3.2 查詢表達式模式的規範
12.3.3 示例1:跟蹤標準查詢操作符的執行過程
12.3.4 限制:查詢表達式衝突
12.3.5 示例2:非泛型的、領域相關的操作符
12.3.6 示例3:非序列的查詢操作符
12.4 查詢Web服務:LINQtoAmazon
12.4.1 LINQtoAmazon介紹
12.4.2 需求
12.4.3 實現
12.5 IQueryable和IQueryProvider:LINQtoAmazon高級版本
12.5.1 IQueryable和IQueryProvider接口
12.5.2 實現
12.5.3 究竟發生了什麼
12.6 小結
第13章 應用程式各層中的LINQ
13.1 LinqBooks應用程式概覽
13.1.1 功能
13.1.2 程式UI概覽
13.1.3 數據模型
13.2 LINQtoSQL及數據訪問層
13.2.1 回顧傳統的三層架構
13.2.2 用專門的數據訪問層還是LINQtoSQL
13.2.3 LinqBooks中對LINQtoSQL的使用
13.3 LINQtoXML的使用
13.3.1 從Amazon中導入數據
13.3.2 生成RSS
13.4 LINQtoDataSet的使用
13.5 使用LINQtoObjects
13.6 可擴展性
13.6.1 自定義查詢操作符
13.6.2 創建並使用自定義LINQ提供器
13.7 展望未來
13.7.1 自定義LINQ功能
13.7.2 LINQtoXSD:強類型的LINQtoXML
13.7.3 PLINQ:支持並行計算的LINQ
13.7.4 LINQtoEntities,ADO.NETEntityFramework的LINQ接口
13.8 小結
第14章 使用LINQ操作DataSet
14.1 LINQtoDataSet概覽
14.2 DataSet回顧
14.2.1 DataSet使用場景及功能
14.2.2 DataSet是什麼
14.2.3 VisualStudio2008和.NET3.5為支持LINQtoDataSet進行的改進
14.3 查詢弱類型DataSet
14.3.1 為DataSet載入數據
14.3.2 不使用LINQ查詢DataSet
14.3.3 使用LINQtoDataSet查詢弱類型DataSet
14.4 查詢強類型DataSet
14.4.1 生成強類型的DataSet
14.4.2 為強類型DataSet載入數據
14.4.3 使用LINQtoDataSet查詢強類型DataSet
14.5 將LINQtoDataSet查詢結果綁定至UI控制項
14.5.1 使用CopyToDataTable將LINQtoDataSet查詢結果複製到DataTable
14.5.2 使用AsDataView實現雙向數據綁定
14.6 在LINQtoDataSet中使用查詢操作符
14.6.1 用於DataRow的Field和SetField操作符
14.6.2 集合操作符以及用DataRowComparer比較DataRow
14.7 小結
附錄 標準查詢操作符