摘要:[補充]下集第五章LinqDataSource,System.Linq與System.DataLinq差異
[補充]下集第五章LinqDataSource,System.Linq與System.DataLinq差異
在本書下集(ASP.NET專題實務 II)的第五章 LinqDataSource裡面,有幾個自己動手寫的程式
有些範例必須事先宣告 System.Linq
但有些範例卻又必須宣告 System.DataLinq
這兩者的差異在哪裡呢?
我整理了微軟 MSDN的文件,請看 http://msdn.microsoft.com/zh-tw/library/bb397897%28v=VS.100%29.aspx
簡單補充如下:
========================================
本文已經收錄在「下集(第二版)」 2011年推出的黑皮書裡面,
5-8 LINQ Provider五大分類
在 Visual Studio中,您可以使用 VB或 C#語法針對下列項目撰寫 LINQ查詢,例如:SQL Server資料庫、XML文件、ADO.NET DataSet(資料集),以及任何由支援 IEnumerable或泛型 IEnumerable(Of T)介面(C#語法為IEnumerable<T>)的物件組成的「集合」。同時也規劃適用於 ADO.NET Entity Framework的 LINQ支援,目前有許多協力廠商正在針對 Web Service和其他資料庫實作撰寫 LINQ Provider(提供者)。
您可以將 LINQ查詢用在新專案中,也可以與現有專案中的非 LINQ查詢一起使用。唯一需求是專案必須以 .NET Framework 3.5 (含) 以後版本為目標。
5-8-1 LINQ to Objects
"LINQ to Objects"一詞指的是直接將 LINQ查詢與任何 IEnumerable或 IEnumerable(Of T)集合搭配使用,而不透過中繼 LINQ Provider或 API (如 LINQ to SQL或 LINQ to XML)。您可以使用 LINQ查詢任何可列舉的集合,例如 List(Of T)、Array或 Dictionary(Of TKey, TValue)。集合可以是使用者定義的集合,也可以是 .NET Framework API傳回的集合(註解:若是C#語法,本段文字中所提及的部分名詞,則需修正為IEnumerable<T>、List<T>等等)。
基本上,LINQ to Objects代表了使用集合的新方式。在舊方式中,您必須撰寫複雜的 foreach迴圈 (Loop) 來指定如何從集合中擷取資料。在 LINQ方式中,只要撰寫宣告式程式碼來描述想要擷取的資料就可以了。
此外,LINQ查詢與 foreach迴圈相比,主要有三項優點:
1. 更簡潔易懂,尤其是在篩選多個條件時。
2. 只需最基本的應用程式程式碼,就可以提供強大的篩選、排序和分組功能。
3. 幾乎不需要做什麼修改,就可以移植用於其他資料來源。
一般而言,要對資料執行的作業愈複雜,就愈能發現使用 LINQ而非傳統反覆運算技術的好處。
重點提示 -- LINQ to Objects將會使用「System.Linq」命名空間。
5-8-2 LINQ to XML
LINQ to XML提供運用 .NET Language-Integrated Query (LINQ) Framework 的記憶體中 XML程式發展介面。LINQ to XML使用最新的 .NET Framework語言能力,而且相當於更新的、重新設計的文件物件模型 (DOM) XML程式發展介面。
LINQ技術家族會針對物件 (LINQ to Objects)、關聯式資料庫 (LINQ to SQL) 與 XML (LINQ to XML),提供一致的查詢經驗。
重點提示 -- LINQ to XMLs將會使用「System.XML.Linq」命名空間。
5-8-3 LINQ to SQL
LINQ to SQL為 .NET Framework 3.5版開始出現的元件,它所提供的執行階段基礎結構可將「關聯式資料」當做物件管理。
註解:關聯式資料會顯示為二維資料表(「關聯(Relation)」或「一般檔案(Flat File)」) 的集合,其中通用資料行會與資料表彼此相關。若要有效地使用 LINQ to SQL,您必須熟悉關聯式資料庫的基礎原則。
在 LINQ to SQL中,關聯式資料庫的資料模型會對應至以開發人員之程式語言表示的物件模型 (Object Model)。執行應用程式時,LINQ to SQL會將物件模型中的 Language Integrated Query (LINQ) 轉譯成 SQL,並將這些查詢傳送至資料庫進行執行。當資料庫傳回結果時,LINQ to SQL會將結果轉譯回您可以在自己的程式語言中處理的物件。
重點提示 -- LINQ to SQL將會使用「System.Data.Linq」命名空間。
5-8-4 LINQ to DataSet
LINQ to DataSet可讓您更方便且更快速地查詢在 DataSet(資料集)物件中快取的資料。更明確地說,LINQ to DataSet可讓開發人員從程式語言本身撰寫查詢,而非使用不同的查詢語言,藉以簡化查詢作業。這點對於 Visual Studio開發人員特別有用,因為他們現在就可以在查詢中運用 Visual Studio所提供的編譯時期語法檢查、靜態型別和 IntelliSense支援。
LINQ to DataSet也可用於查詢已經從一個或多個資料來源合併的資料。這點可以實現許多資料表示和處理方式需要彈性的案例,例如本機查詢彙總的資料和在 Web 應用程式中進行中介層 (Middle Tier) 快取。尤其,一般報表、分析和商務智慧應用程式都需要這種管理方法。
LINQ to DataSet功能主要是透過 DataRowExtensions和 DataTableExtensions 類別 (Class) 中的擴充方法公開 (Expose) 的。LINQ to DataSet是以現有的 ADO.NET 2.0架構(包含後續版本 3.5或4.0)為基礎並加以使用,但是不會在應用程式程式碼中取代 ADO.NET 2.0。現有的 ADO.NET 2.0程式碼將繼續在 LINQ to DataSet應用程式中運作。下圖將說明 LINQ to DataSet與 ADO.NET 2.0的關聯性以及資料存放區。
重點提示 -- LINQ to DataSet將會使用「System.Data.DataSetExtensions」命名空間。
5-8-5 LINQ to Entities
LINQ to Entities提供了 Language-Integrated Query (LINQ) 支援,可讓開發人員使用 VB或 C#語法針對 Entity Framework概念模型撰寫查詢。針對 Entity Framework執行的查詢是以命令樹查詢來表示,每一個查詢都會針對物件內容來執行。LINQ to Entities會將 Language-Integrated Queries (LINQ) 查詢轉換成命令樹查詢、針對 Entity Framework執行查詢,並傳回 Entity Framework和 LINQ都可以使用的物件(註解:Entity Framework是 .NET 3.5 SP1之後出現的,您可以在本書後續章節看到完整的介紹)。
下列是建立及執行 LINQ to Entities查詢的程序:
1. 從 ObjectContext建構 ObjectQuery (Of T)執行個體(註:C#語法寫為 ObjectQuery<T>)。
2. 使用ObjectQuery (Of T)執行個體,在 C#或 VB語法中撰寫 LINQ to Entities查詢。
3. 將 LINQ標準查詢運算子和運算式轉換成命令樹。
4. 在命令樹中會針對資料來源查詢執行。執行期間於資料來源上擲回的任何例外狀況都會直接傳遞給用戶端。
5. 將查詢結果傳回用戶端。
重點提示 -- LINQ to Entities將會使用「System.Data.Objects」命名空間。
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。