語言整合式查詢 (LINQ) (c # )

Language Integrated Query (LINQ) 是一組以直接將查詢功能整合至 C# 語言為基礎之技術的名稱。 傳統上,資料查詢是以簡單的字串表示,既不會在編譯時進行類型檢查,也不支援 IntelliSense。 此外,您還必須針對每種資料來源類型學習不同的查詢語言:SQL 資料庫、XML 文件、各種 Web 服務等等。 透過 LINQ,查詢會是第一級語言建構,和類別、方法及事件相同。 您可以使用語言關鍵字和熟悉的運算子,針對強型別的物件集合撰寫查詢。 LINQ 技術系列會針對物件 (LINQ to Object)、關聯式資料庫 (LINQ to SQL) 與 XML (LINQ to XML),提供一致的查詢體驗。

對於撰寫查詢的開發人員來說,LINQ 最明顯的「語言整合」部分就是查詢運算式。 查詢運算式是以宣告式「查詢語法」撰寫。 透過使用查詢語法,您就可以利用最少的程式碼,針對資料來源執行篩選、排序及分組作業。 您可以使用相同的基本查詢運算式模式來查詢及轉換 SQL 資料庫中的資料、ADO.NET 資料集、XML 檔和資料流程,以及 .NET 集合。

您可以使用 C# 針對下列項目撰寫 LINQ 查詢:SQL Server 資料庫、XML 文件、ADO.NET 資料集,以及支援 IEnumerable 或泛型 IEnumerable<T> 介面的任何物件集合。 也有協力廠商針對許多 Web 服務和其他資料庫實作提供 LINQ 支援。

下列範例示範完整的查詢作業。 完整的作業包括建立資料來源、定義查詢運算式,並在 foreach 陳述式中執行查詢。

class LINQQueryExpressions
{
    static void Main()
    {

        // Specify the data source.
        int[] scores = new int[] { 97, 92, 81, 60 };

        // Define the query expression.
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // Execute the query.
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }
    }
}
// Output: 97 92 81

下圖顯示 Visual Studio 中針對 SQL Server 資料庫以 C# 和 Visual Basic 撰寫之部分完成的 LINQ 查詢,其中有完整的類型檢查和 IntelliSense 支援:

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

查詢運算式概觀

  • 查詢運算式可以用來查詢並轉換來自任何已啟用 LINQ 之資料來源的資料。 例如,單一查詢可以從 SQL 資料庫擷取資料,並產生 XML 資料流做為輸出。
  • 查詢運算式很容易學習,因為其中使用許多熟悉的 C# 語言建構。
  • 查詢運算式中的變數皆為強型別,不過您在很多情況下並不需要明確提供型別,因為編譯器能夠自行推斷它。 如需詳細資訊,請參閱 LINQ 查詢作業中的類型關聯性。
  • 在您針對查詢變數進行逐一查看之前 (例如,在 foreach 陳述式中),查詢將不會執行。 如需詳細資訊,請參閱 LINQ 查詢簡介
  • 在編譯期間,查詢運算式會根據 C# 規格中提出的規則,轉換成「標準查詢運算子」方法呼叫。 所有可使用查詢語法表示的查詢,也都可以利用方法語法來表示。 不過,在大多數情況下,查詢語法較容易閱讀且更簡潔。 如需詳細資訊,請參閱 C# 語言規格標準查詢運算子概觀
  • 做為撰寫 LINQ 查詢的規則,我們建議您優先使用查詢語法,且只有在必要時才使用方法語法。 這兩個形式之間並沒有語意或效能上的差異。 相較於以方法語法撰寫的對等運算式,查詢運算式通常更容易閱讀。
  • 某些查詢作業 (例如 CountMax) 沒有同等的查詢運算式子句,因此必須以方法呼叫來表示。 方法語法能以數種方式來與查詢語法結合。 如需詳細資訊,請參閱 LINQ 中的查詢語法和方法語法
  • 根據查詢所套用的型別,可將查詢運算式編譯為運算式樹狀結構或委派。 IEnumerable<T> 查詢會編譯成委派。 IQueryableIQueryable<T> 查詢會編譯成運算式樹狀架構。 如需詳細資訊,請參閱運算式樹狀結構

下一步

若要深入了解 LINQ 的詳細資料,請先參閱查詢運算式基本概念以熟悉基本概念,然後閱讀您感興趣的 LINQ 技術文件:

若要深入了解 LINQ 的一般資訊,請參閱 C# 中的 LINQ

若要開始使用 C# 中的 LINQ,請參閱使用 LINQ 教學課程。