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 查詢的規則,我們建議您優先使用查詢語法,且只有在必要時才使用方法語法。 這兩個形式之間並沒有語意或效能上的差異。 相較於以方法語法撰寫的對等運算式,查詢運算式通常更容易閱讀。
某些查詢作業 (例如 Count 或 Max) 沒有同等的查詢運算式子句,因此必須以方法呼叫來表示。 方法語法能以數種方式來與查詢語法結合。 如需詳細資訊,請參閱 LINQ 中的查詢語法和方法語法。
根據查詢所套用的型別,可將查詢運算式編譯為運算式樹狀結構或委派。 IEnumerable<T> 查詢會編譯成委派。 IQueryable 和 IQueryable<T> 查詢會編譯成運算式樹狀架構。 如需詳細資訊,請參閱運算式樹狀結構。
下一步
若要深入了解 LINQ 的詳細資料,請先參閱查詢運算式基本概念以熟悉基本概念,然後閱讀您感興趣的 LINQ 技術文件:
XML 文件:LINQ to XML
ADO.NET Entity Framework:LINQ to Entities
.NET 集合、檔案、字串等等:LINQ to Objects
若要深入了解 LINQ 的一般資訊,請參閱 C# 中的 LINQ。
若要開始使用 C# 中的 LINQ,請參閱使用 LINQ 教學課程。