C#3.0新增功能09 LINQ 基礎01 語言集成查詢

語言集成查詢 (LINQ) 是一系列直接將查詢功能集成到 C# 語言的技術統稱。 數據查詢從來都表示爲簡單的字符串,沒有編譯時類型檢查或 IntelliSense 支持。 此外,須要針對每種類型的數據源瞭解不一樣的查詢語言:SQL 數據庫、XML 文檔、各類 Web 服務等。 藉助 LINQ,查詢成爲了最高級的語言構造,就像類、方法和事件同樣。 可使用語言關鍵字和熟悉的運算符針對強類型化對象集合編寫查詢。 LINQ 系列技術提供了針對對象 (LINQ to Objects)、關係數據庫 (LINQ to SQL) 和 XML (LINQ to XML) 的一致查詢體驗。html

對於編寫查詢的開發者來講,LINQ 最明顯的「語言集成」部分就是查詢表達式。 查詢表達式採用聲明性查詢語法編寫而成。 使用查詢語法,能夠用最少的代碼對數據源執行篩選、排序和分組操做。 可以使用相同的基本查詢表達式模式來查詢和轉換 SQL 數據庫、ADO .NET 數據集、XML 文檔和流以及 .NET 集合中的數據。數據庫

在 C# 中可爲如下對象編寫 LINQ 查詢:SQL Server 數據庫、XML 文檔、ADO.NET 數據集以及支持 IEnumerable 或泛型 IEnumerable<T> 接口的任何對象集合。 此外,第三方也爲許多 Web 服務和其餘數據庫實現提供了 LINQ 支持。express

下面的示例展現了完整的查詢操做。 完整的操做包括建立數據源、定義查詢表達式和在 foreach 語句中執行查詢。api

class LINQQueryExpressions
{
    static void Main()
    {
        // 指定數據源。
        int[] scores = new int[] { 97, 92, 81, 60 };

        // 定義查詢表達式
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // 執行查詢
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }            
    }
}
// 輸出: 97 92 81

下圖爲 Visual Studio 中的圖例,顯示了使用 C# 和 Visual Basic 針對 SQL Server 數據庫編寫的不完整 LINQ 查詢,並具備徹底類型檢查和 IntelliSense 支持:框架

顯示具備 Intellisense 的 LINQ 查詢的圖表。

查詢表達式概述

  • 查詢表達式可用於查詢並轉換全部啓用了 LINQ 的數據源中的數據。 例如,經過一個查詢便可檢索 SQL 數據庫中的數據,並生成 XML 流做爲輸出。ide

  • 查詢表達式易於掌握,由於使用了許多熟悉的 C# 語言構造。性能

  • 查詢表達式中的變量全都是強類型,儘管在許多狀況下,無需顯式提供類型,由於編譯器能夠推斷出。 有關詳細信息,請參閱 LINQ 查詢操做中的類型關係ui

  • 只有在循環訪問查詢變量後,纔會執行查詢(例如,在 foreach 語句中)。 有關詳細信息,請參閱 LINQ 查詢簡介spa

  • 在編譯時,查詢表達式根據 C# 規範規則轉換成標準查詢運算符方法調用。 可以使用查詢語法表示的任何查詢均可以使用方法語法進行表示。 不過,在大多數狀況下,查詢語法的可讀性更高,也更爲簡潔。 有關詳細信息,請參閱 C# 語言規範標準查詢運算符概述code

  • 一般,咱們建議在編寫 LINQ 查詢時儘可能使用查詢語法,並在必要時儘量使用方法語法。 這兩種不一樣的形式在語義或性能上毫無差別。 查詢表達式一般比使用方法語法編寫的等同表達式更具可讀性。

  • 一些查詢操做(如 Count 或 Max)沒有等效的查詢表達式子句,所以必須表示爲方法調用。 能夠各類方式結合使用方法語法和查詢語法。 有關詳細信息,請參閱 LINQ 中的查詢語法和方法語法

  • 查詢表達式可被編譯成表達式樹或委託,具體視應用查詢的類型而定。IEnumerable<T> 查詢編譯爲委託。 IQueryable 和 IQueryable<T> 查詢編譯爲表達式樹。 有關詳細信息,請參閱表達式樹

 

若要詳細瞭解 LINQ,請先自行熟悉查詢表達式基礎知識中的一些基本概念,而後再閱讀感興趣的 LINQ 技術的相關文檔:

若要更深刻地全面瞭解 LINQ,請參閱 C# 中的 LINQ

若要開始在 C# 中使用 LINQ,請參閱教程使用 LINQ

 

相關文章
相關標籤/搜索