Language Integrated Query (LINQ)

Language Integrated Query (LINQ) 是一組以直接將查詢功能整合至 C# 語言為基礎之技術的名稱。 傳統上,資料查詢是以簡單的字串表示,既不會在編譯時進行類型檢查,也不支援 IntelliSense。 此外,您還必須針對每種資料來源類型學習不同的查詢語言:SQL 資料庫、XML 文件、各種 Web 服務等等。 透過 LINQ,查詢會是第一級語言建構,和類別、方法及事件相同。

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

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

// Specify the data source.
int[] scores = { 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

查詢運算式概觀

  • 查詢運算式可以用來查詢並轉換來自任何已啟用 LINQ 之資料來源的資料。 例如,單一查詢可以從 SQL 資料庫擷取資料,並產生 XML 資料流做為輸出。

  • 查詢運算式很容易掌握,因為其中使用許多熟悉的 C# 語言建構。

  • 查詢運算式中的變數皆為強型別,不過您在很多情況下並不需要明確提供型別,因為編譯器能夠自行推斷它。 如需詳細資訊,請參閱 LINQ 查詢作業中的型別關聯性

  • 在您針對查詢變數進行逐一查看之前 (例如,在 foreach 陳述式中),查詢將不會執行。 如需詳細資訊,請參閱 LINQ 查詢簡介

  • 在編譯期間,查詢運算式會根據 C# 規格中提出的規則,轉換成「標準查詢運算子」方法呼叫。 所有可使用查詢語法表示的查詢,也都可以利用方法語法來表示。 不過,在大多數情況下,查詢語法較容易閱讀且更簡潔。 如需詳細資訊,請參閱 C# 語言規格標準查詢運算子概觀

  • 做為撰寫 LINQ 查詢的規則,我們建議您優先使用查詢語法,且只有在必要時才使用方法語法。 這兩個形式之間並沒有語意或效能上的差異。 相較於以方法語法撰寫的對等運算式,查詢運算式通常更容易閱讀。

  • 某些查詢作業 (例如 CountMax) 沒有同等的查詢運算式子句,因此必須以方法呼叫來表示。 方法語法能以數種方式來與查詢語法結合。 如需詳細資訊,請參閱 LINQ 中的查詢語法和方法語法

  • 根據查詢所套用的型別,可將查詢運算式編譯為運算式樹狀結構或委派。 IEnumerable<T> 查詢會編譯成委派。 IQueryableIQueryable<T> 查詢會編譯成運算式樹狀架構。 如需詳細資訊,請參閱運算式樹狀結構

下一步

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

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

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