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

C# LINQ 查詢語法與方法語法快速入門

     編輯:關於C語言

前言

LINQ (Language Integrated Query) 是 C# 3.0 引入的核心功能,提供統一的資料查詢語法。本文以實用範例快速展示查詢語法與方法語法的對應關係。

基本範例:篩選 BMI > 25 的人員

查詢語法 (Query Syntax)


var people = new List
{
    new Person { Name = "Alice", BmiValue = 22 },
    new Person { Name = "Bob", BmiValue = 28 },
    new Person { Name = "Charlie", BmiValue = 31 },
    new Person { Name = "Diana", BmiValue = 24 }
};

// 查詢語法:類 SQL 風格
var highBmiPeople = from p in people
                    where p.BmiValue > 25
                    select p;

// 只選取姓名
var names = from p in highBmiPeople
            select p.Name;

// 執行查詢並顯示
foreach (string name in names)
{
    MessageBox.Show(name);  // 依序顯示 Bob, Charlie
}

方法語法 (Method Syntax / Fluent API)


// 等價的方法鏈結寫法
var highBmiPeople = people.Where(p => p.BmiValue > 25);
var names = highBmiPeople.Select(p => p.Name);

// 一行寫法
var names = people
    .Where(p => p.BmiValue > 25)
    .Select(p => p.Name);

foreach (string name in names)
{
    MessageBox.Show(name);
}

兩種語法對比

特性查詢語法方法語法
可讀性複雜查詢更接近 SQL,易讀簡單查詢更簡潔
功能完整性不支援所有運算子 (如 Count, Max)支援所有 LINQ 運算子
除錯難以在中間步驟設中斷點可在任意 .Where/.Select 設中斷點
IntelliSense支援較弱完整支援
編譯轉換編譯器轉換為方法語法原生

常用 LINQ 運算子速查

分類運算子說明
篩選Where條件篩選
OfType型別篩選
Distinct去重複
Take/Skip分頁
投影Select轉換形狀
SelectMany扁平化巢狀集合
Zip合併兩序列
Cast型別轉換
排序OrderBy/ThenBy遞增排序
OrderByDescending/ThenByDescending遞減排序
Reverse反轉順序
分組GroupBy分組
ToLookup建立查找表
Join內部聯結
GroupJoin群組聯結
集合Union聯集
Intersect交集
Except差集
Concat串接
量詞Any任一符合
All全部符合
Contains包含元素
聚合Count/Sum/Average統計
Min/Max極值
Aggregate自訂聚合

延遲執行與立即執行


// 建立查詢:尚未執行 (延遲執行)
var query = people.Where(p => p.BmiValue > 25);

// 立即執行並具體化結果
var list = query.ToList();      // List
var array = query.ToArray();    // Person[]
var count = query.Count();      // int
var first = query.First();      // Person (拋出例外若無元素)
var firstOrDefault = query.FirstOrDefault();  // Person 或 null

實用進階範例


// 分組統計:按 BMI 區間分組計數
var bmiGroups = people
    .GroupBy(p => 
    {
        if (p.BmiValue < 18.5) return "Underweight";
        if (p.BmiValue < 25) return "Normal";
        if (p.BmiValue < 30) return "Overweight";
        return "Obese";
    })
    .Select(g => new { Category = g.Key, Count = g.Count() })
    .OrderBy(x => x.Category);

// 連接兩個資料源
var orders = new List { ... };
var customers = new List { ... };

var orderDetails = from o in orders
                   join c in customers on o.CustomerId equals c.Id
                   select new { o.OrderId, c.Name, o.Amount, o.Date };

總結

LINQ 查詢語法適合複雜多條件查詢(類 SQL 思維);方法語法適合簡單鏈結、除錯、完整運算子支援。兩者可混用:from p in people.Where(...) select ...。掌握核心運算子與延遲執行特性,是高效使用 LINQ 的關鍵。

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