首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Linq 誕生記:從命令式到宣告式的語言演進

     編輯:關於.NET

Linq 本質上是 C# 等主流語言上抽象出的領域專用語言 (DSL),針對資料處理領域。它將 select、from、where、group 等 SQL 關鍵字引入 C#,透過編譯器將查詢語法轉換為原生語法樹。

Linq 編譯流程

從手工迴圈到 Lambda 的演進

假設需從書單找出價格 < 50 的書籍:

階段 1:硬編碼迴圈

public static IList<Book> SearchBookByPrice()
{
    IList<Book> books = GetBooks();
    IList<Book> results = new List<Book>();
    foreach (Book book in books)
        if (book.Price < 50) results.Add(book);
    return results;
}

階段 2:委派抽象條件

public delegate bool Condition(Book book);
public static IList<Book> SearchBook(Condition condition)
{
    foreach (Book book in books)
        if (condition(book)) results.Add(book);
}

呼叫:SearchBook(delegate(Book b) { return b.Title == "yuyi"; });

階段 3:Lambda 簡化語法

SearchBook(book => book.Title == "yuyi");

階段 4:擴充方法賦予集合原生能力

public static IEnumerable<T> Where<T>(this IEnumerable<T> items, Func<T, bool> condition)
{
    foreach (T item in items)
        if (condition(item)) yield return item;
}

呼叫:books.Where(book => book.Title == "yuyi")

階段 5:泛型化支援所有集合

針對 IEnumerable<T> 擴充,一次解決所有集合類型。

微軟標準化:System.Linq.Enumerable

.NET 3.5 System.Core.dll 內建 System.Linq.Enumerable,提供 Where、Select、OrderBy、GroupBy、Average、Distinct 等完整查詢運算子,涵蓋 SQL 所有核心功能。

這就是 Linq 橫空出世的完整演進路徑:從命令式「如何做」轉向宣告式「要什麼」,編譯器承擔轉譯重任,開發者專注業務邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved