查詢是一種從數據源檢索數據的表達式。 查詢通常用專門的查詢語言來表示。 隨著時間的推移,人們已經為各種數據源開發了不同的語言;例如,用于關系數據庫的 SQL 和用于 XML 的 XQuery。 因此,開發人員不得不針對他們必須支持的每種數據源或數據格式而學習新的查詢語言。 LINQ 通過提供一種跨各種數據源和數據格式使用數據的一致模型,簡化了這一情況。 在 LINQ 查詢中,始終會用到對象。 可以使用相同的基本編碼模式來查詢和轉換 XML 文檔、SQL 數據庫、ADO.NET 數據集、.NET 集合中的數據以及對其有 LINQ 提供程序可用的任何其他格式的數據。
查詢操作的三個部分
所有 LINQ 查詢操作都由以下三個不同的操作組成:
-
獲取數據源。
-
創建查詢。
-
執行查詢。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Linq 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //創建int類型的數組 14 //1.數據源 15 int[] myInt = new int[7] {0,1,2,3,4,5,6 }; 16 17 //2.創建查詢 18 var myQuery = from s in myInt 19 where (s % 2) == 0 20 select s; 21 //3.執行查詢 22 foreach (var item in myQuery) 23 { 24 Console.WriteLine("{0}",item); 25 } 26 27 Console.ReadKey(); 28 29 30 } 31 } 32 }
下圖顯示了完整的查詢操作。 在 LINQ 中,查詢的執行與查詢本身截然不同;換句話說,如果只是創建查詢變量,則不會檢索任何數據。
數據源
在上一個示例中,由于數據源是數組,因此它隱式支持泛型 IEnumerable 接口。 這一事實意味著該數據源可以用 LINQ 進行查詢。 查詢在 foreach 語句中執行,因此,foreach 需要 IEnumerable 或 IEnumerable。 支持 IEnumerable 或派生接口(如泛型 IQueryable)的類型稱為可查詢類型。
可查詢類型不需要進行修改或特殊處理就可以用作 LINQ 數據源。 如果源數據還沒有作為可查詢類型出現在內存中,則 LINQ 提供程序必須以此方式表示源數據。 例如,LINQ to XML 將 XML 文檔加載到可查詢的 XElement 類型中:
1 // Create a data source from an XML document. 2 // using System.Xml.Linq; 3 XElement contacts = XElement.Load(@"c:\myContactList.xml");
在 LINQ to SQL 中,首先手動或使用 對象關系設計器(O/R 設計器) 在設計時創建對象關系映射。 針對這些對象編寫查詢,然后由 LINQ to SQL 在運行時處理與數據庫的通信。 在下面的示例中,Customers 表示數據庫中的特定表,并且查詢結果的類型 IQueryable 派生自 IEnumerable。
1 Northwnd db = new Northwnd(@"c:\northwnd.mdf"); 2 3 // Query for customers in London. 4 IQueryable<Customer> custQuery = 5 from cust in db.Customers 6 where cust.City == "London" 7 select cust;
上一個示例中的查詢從整數數組中返回所有偶數。 該查詢表達式包含三個子句:from、where 和 select。(如果您熟悉 SQL,您會注意到這些子句的順序與 SQL 中的順序相反。)from 子句指定數據源,where 子句應用篩選器,select 子句指定返回的元素的類型。 LINQ 查詢表達式(C# 編程指南) 一節中詳細討論了這些子句和其他查詢子句。目前需要注意的是,在 LINQ 中,查詢變量本身不執行任何操作并且不返回任何數據。 它只是存儲在以后某個時刻執行查詢時為生成結果而必需的信息。 有關在幕后是如何構建查詢的更多信息,請參見標準查詢運算符概述。
文章列表