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

LINQ 入門:從集合操作演進看語言集成查詢的威力

     編輯:關於C#

三個時代的集合操作對比

.NET 1.x:ArrayList + 裝箱/拆箱 + 無類型安全

ArrayList list = new ArrayList();
list.Add(new Employee("Zxjay", 20, "010-123456"));
list.Add(new Employee("Andy", 30, "020-123456"));

// 排序需實現 IComparer
list.Sort(new EmployeeNameComparer());

// 篩選:遍歷 + 強轉 + 裝箱
ArrayList beijing = new ArrayList();
foreach (object obj in list)
{
    Employee e = obj as Employee;
    if (e != null && e.Phone.StartsWith("010") && e.Age < 50)
        beijing.Add(e);
}

.NET 2.0:泛型 + 匿名方法 + 強類型

List<Employee> list = new List<Employee> {
    new Employee("Zxjay", 20, "010-123456"),
    new Employee("Andy", 30, "020-123456")
};

// 匿名方法排序/篩選
list.Sort(delegate(Employee x, Employee y) { return x.Name.CompareTo(y.Name); });
var beijing = list.FindAll(delegate(Employee e) { 
    return e.Phone.StartsWith("010") && e.Age < 50; 
});

.NET 3.5+:自動屬性 + Lambda + LINQ 查詢語法

// 實體類簡化
public class Employee { public string Name {get;set;} public int Age {get;set;} public string Phone {get;set;} }

// 集合初始化器
var list = new List<Employee> {
    new Employee { Name="Zxjay", Age=20, Phone="010-123456" },
    new Employee { Name="Andy", Age=30, Phone="020-123456" },
    new Employee { Name="Bill", Age=50, Phone="010-345678" },
    new Employee { Name="Lee", Age=40, Phone="010-234567" }
};

// LINQ 查詢語法 - 類 SQL 但 select 在最後
var result = from e in list
             where e.Phone.StartsWith("010") && e.Age < 50
             orderby e.Name
             select e;

// 等價 Lambda 鏈
var result = list
    .Where(e => e.Phone.StartsWith("010") && e.Age < 50)
    .OrderBy(e => e.Name);

演進對照表

維度.NET 1.x.NET 2.0.NET 3.5+
集合類型ArrayList (object)List<T> (泛型)List<T> + 初始化器
類型安全運行時編譯時編譯時 + 推斷
裝箱/拆箱大量無無
排序/篩選語法IComparer 類匿名委托Lambda / 查詢語法
代碼行數最多中等最少
可讀性低中高 (聲明式)

LINQ 的本質

  • 語言集成:查詢成為 C# 一級公民,享有 IntelliSense、編譯檢查、重構支援
  • 統一模型:同一套語法查詢記憶體集合、DataSet、SQL、XML
  • 聲明式:描述「要什麼」而非「怎麼做」
  • 可組合:查詢可延遲、串聯、參數化

下一步學習路徑

  1. 標準查詢運算子 (Where, Select, OrderBy, GroupBy, Join...)
  2. 延遲執行與立即執行機制
  3. LINQ to SQL / Entity Framework 實戰
  4. Expression Tree 與 IQueryable 原理
  5. PLINQ 並行查詢

LINQ 不只是語法糖,它改變了 C# 處理數據的思維方式。從這裡開始,擁抱聲明式編程。

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