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

LINQ to SQL 深入學習系列(四):LINQ 查詢基礎

     編輯:關於.NET

本文部分內容整理自 MSDN,介紹 LINQ 基本概念、查詢運作三步驟、泛型類型與查詢語法。

一、LINQ 概念

LINQ(Language Integrated Query,語言整合查詢)是 .NET 語言內建的查詢特性,提供編譯期語法檢查、豐富中繼資料、IntelliSense 等強類型優勢。它是 Visual Studio 2008 與 .NET Framework 3.5 的突破性創新,橋接物件領域與資料領域。

二、背景

傳統查詢以字串表示,缺乏編譯期檢查與 IntelliSense,且需針對不同資料源(SQL、XML、Web Service)學習不同語言。LINQ 使查詢成為 C#/VB 的一等語言構造,使用關鍵字與熟悉運算子針對強類型集合編寫查詢。支援資料源:SQL Server、XML、ADO.NET DataSet、實作 IEnumerable/IEnumerable<T> 的集合,並規劃支援 Entity Framework 與第三方提供者。

三、查詢運作解析

所有 LINQ 查詢包含三步驟:

  1. 取得資料源
  2. 建立查詢
  3. 執行查詢

範例:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var lowNums = from n in numbers
              where n < 5
              select n;
foreach (var x in lowNums) Console.WriteLine(x);
// 輸出:4, 1, 3, 2, 0

等同方法語法:

var lowNums = numbers.Where(n => n < 5).Select(n => n);

基礎知識:Func 泛型委派
Func<T, TResult> 封裝單一參數並回傳 TResult 的方法。Lambda 表達式 n => n < 5 相當於匿名委派 delegate(int n) { return n < 5; }。

Where 擴展方法原始碼:

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    foreach (TSource item in source)
        if (predicate(item)) yield return item;
}

資料源:陣列隱式支援 IEnumerable<T>,故可被 LINQ 查詢。支援 IEnumerable<T> 或 IQueryable<T> 的類型稱為「可查詢類型」。

查詢:指定要檢索的資訊、排序、分組、結構化。查詢變數儲存查詢表達式,本身不執行也不回傳資料。查詢表達式包含 from、where、select 子句(順序與 SQL 相反)。

執行查詢:foreach 迴圈即為執行過程。分為「強制立即執行」與「延遲執行」,後續詳細說明。

四、LINQ 與泛型類型

LINQ 查詢基於泛型。兩個基本概念:

  1. 建立泛型集合(如 List<T>)時,以實際類型取代 T,提供強類型與免轉換優勢。
  2. IEnumerable<T> 介面讓泛型集合可用 foreach 列舉。LINQ 查詢變數實作 IEnumerable<T>,表示執行時產生零或多個 T 物件的序列。
IEnumerable<Customer> customerQuery = from cust in customers
                                      where cust.City == "London"
                                      select cust;
foreach (Customer c in customerQuery) Console.WriteLine(c.LastName + ", " + c.FirstName);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved