Charlie Chen (陳慶裕)
5 min readAug 7, 2018

LINQ 深入淺出(一):觀念篇

教學傳送門《Language-Integrated Query 快速上手》,保哥的課程內容很扎實,請多多支持好課程!

語言整合查詢(英語:Language Integrated Query,縮寫:LINQ)音”link”

說到早期微軟的開發人員,想要存取資料庫,都是運用ADO.NET來進行資料CRUD,而它也是在Web Form時期造成台灣的專案公司頗為熱宗使用的開發方式,因為進入門檻低,就能做到簡單、快速開發出網站,這也是打下一大基礎的技術,即便ASP.NET MVC已經出現10年左右,目前為止,還是有很多公司都是用此一開發框架(Web Form)進行專案開發!

ADO.NET和Web Form原本應該是完美的搭配,然而此架構下也並非無缺點,正好它的缺點也是相當的致命,就是PostBack讓資料存取後顯示在頁面上的結果,常常會有落差,為了解決這樣的問題,是要消耗更大的成本進行處理。

而在這時候LINQ (C# 3.0^)和ASP.NET MVC就此誕生,微軟新的架構就是要來解決控制項效能和PostBack問題,但是相對而言,門檻也提高了,但過了那個關卡就通了!

另外,值得一提的是LINQ也是基於ADO.NET之上所開發的架構,所以使用LINQ其實底層也是運用到ADO.NET的技術。

LINQ主要特性:強型別、延遲執行、函式語言特性、平行處理…等。簡單說可以針對基於IEnumerable底層下的任何陣列、集合做資料查詢。

保哥:LINQ改變了資料處理方式,更改變了我們解決問題的思考方式!

LINQ目前提供者有Linq to Object、Linq to SQL、Linq to XML、Linq to DataSet、Linq to Entities

泛型與LINQ命名空間:
若想要學好LINQ,以下三個MSDN可建議看:

System.Collections.Generic
System.Linq
System.Linq.Expressions

其中Linq.Expressions的MSDN解釋命名空間包含類別、 介面和列舉,可讓語言層級程式碼運算式表示為運算式樹狀架構的表單中的物件。這算是LINQ提供者都會實作到的類別,但也相對很抽象,所以可以多花點時間了解!

( 資料結構,如串列 (List)HashTable (C# 下的 Dicationay)堆疊 (Stack)樹 (Tree),僅管這些資料結構在內部實作與外部使用的界面上,各有不同,但基本上我們都會希望這些資料結構,能提供有巡訪 (Traverse) 資料的能力。)

當然如果你是一個很講究效能的人,執行查詢時,必然要了解一下延遲載入預先載入的差別在哪了!

延遲載入:(執行foreach取出每一個元素都會執行LINQ)string[] names = { "Tom", "Mary", "Charlie", "John" };
var query = from p in names
where p.Length == 3
select p;
foreach (var item in query)
{
Console.WriteLine(item.ToString());
Console.ReadLine();
}

另一種方式

預先載入:(在執行foreach前,已執行完LINQ的查詢)string[] names = { "Tom", "Mary", "Charlie", "John" };
var query = from p in names
where p.Length == 3
select p;
var loadedQuery = from p in query.ToList()
where p.StartsWith("T")
select p;
foreach (var item in loadedQuery)
{
Console.WriteLine(item.ToString());
Console.ReadLine();
}

撰寫程式時,LINQ也所提供的兩種寫法:

編程式(Imperative):(lambda)

IEnumerable<int> results = source
.Where(x => x > 0)
.OrderByDescending(y => y);

宣告式(Declarative):(link)

var query = from p in names
where p.Length == 3
select p;

以上,這些可以多多了解一下LINQ的語言強大,畢竟,目前很多語言已經開始支持函式編程,算是必學的撰寫技巧之一,希望此篇能夠對讀者有提升觀念,謝謝!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Charlie Chen (陳慶裕)
Charlie Chen (陳慶裕)

No responses yet

Write a response