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

Linq 大觀園:統一查詢體驗的三大支柱與實戰對比

     編輯:關於.NET

Linq 家族包含三大支柱,提供「殊途同歸」的查詢體驗:

  • Linq to Objects:記憶體集合查詢 (System.Linq.Enumerable)
  • Linq to XML:XML 文件查詢 (System.Xml.Linq.dll)
  • Linq to SQL:關聯式資料庫查詢 (System.Data.Linq.dll,原生支援 SQL Server;DbLinq 擴充支援 MySQL/Oracle/PostgreSQL/SQLite)

Linq 架構總覽

查詢語法 vs 方法語法:編譯器視角無差別

// 查詢語法 (語法糖)
var result = from book in books
             where book.Title.StartsWith("I")
             orderby book.Price
             select new { Key = book.Title, Value = book.Price };

// 編譯後等同方法語法
var result = books.Where(b => b.Title.StartsWith("I"))
                  .OrderBy(b => b.Price)
                  .Select(b => new { Key = b.Title, Value = b.Price });

Reflector 反編譯確認兩者生成完全相同的 IL 代碼。

實戰對比:同一查詢邏輯,三種資料源零改動

Linq to Objects (記憶體集合)

IList<Book> books = new List<Book> {
    new Book { Title = "Inside COM", Price = 20 },
    new Book { Title = "Inside C#", Price = 100 },
    new Book { Title = "Linq", Price = 120 }
};

var result = from book in books
             where book.Price > 50
             orderby book.Price
             select new { Key = book.Title, Value = book.Price };

Linq to SQL (SQL Server)

[Table]
public class Book
{
    [Column] public string Title { get; set; }
    [Column(DbType = "numeric(5,2)")] public float Price { get; set; }
    [Column] public string Author { get; set; }
    [Column] public string ISBN { get; set; }
}

// 查詢碼完全相同,僅資料源不同
DataContext db = new DataContext(connString);
var result = from book in db.GetTable<Book>()
             where book.Price > 50
             orderby book.Price
             select new { Key = book.Title, Value = book.Price };

執行結果

輸出結果完全一致:Inside C# 100、Linq 120。資料儲存細節對查詢邏輯完全透明,正是 Linq「語言整合查詢」的核心價值。

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