程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> LINQ基本查詢操作

LINQ基本查詢操作

編輯:關於.NET

下面各主題中提供了更詳細的信息:獲取數據源

在 LINQ 查詢中,第一 步是指定數據源。像在大多數編程語言中一樣,在 C# 中,必須先聲明變量,才 能使用它。在 LINQ 查詢中,最先使用 from 子句的目的是引入數據源 (customers) 和范圍變量 (cust)。

//queryAllCustomers is an IEnumerable<Customer>
var queryAllCustomers = from cust in customers
            select cust;

范圍 變量類似於 foreach 循環中的迭代變量,但在查詢表達式中,實際上不發生迭 代。執行查詢時,范圍變量將用作對 customers 中的每個後續元素的引用。因 為編譯器可以推斷 cust 的類型,所以您不必顯式指定此類型。其他范圍變量可 由 let 子句引入

篩選

也許最常用的查詢操作是應用布爾表達式形式 的篩選器。此篩選器使查詢只返回那些表達式結果為 true 的元素。使用 where 子句生成結果。實際上,篩選器指定從源序列中排除哪些元素。在下面的示例中 ,只返回那些地址位於倫敦的 customers。

var queryLondonCustomers = from cust in customers
               where cust.City == "London"
               select cust;

您可以使用熟悉的 C# 邏輯 AND 和 OR 運算符來根據需要在 where 子句中應用任意數量的篩選表達式。例如,若要只 返回位於“倫敦”AND 姓名為“Devon”的客戶,您應編 寫下面的代碼:

where cust.City=="London" && cust.Name == "Devon"

若要返回位於倫 敦或巴黎的客戶,您應編寫下面的代碼:

where cust.City == "London" || cust.City == "Paris"

排序

通常可以很方便地將返回的數據進行排序。orderby 子句將使返回的序列中 的元素按照被排序的類型的默認比較器進行排序。例如,下面的查詢可以擴展為 按 Name 屬性對結果進行排序。因為 Name 是一個字符串,所以默認比較器執行 從 A 到 Z 的字母排序。

var queryLondonCustomers3 =
   from cust in customers
  where cust.City == "London"
  orderby cust.Name ascending
   select cust;

若要按相反順序(從 Z 到 A)對結果進行排序, 請使用 orderby…descending 子句。

分組

使用 group 子句 ,您可以按指定的鍵分組結果。例如,您可以指定結果應按 City 分組,以便位 於倫敦或巴黎的所有客戶位於各自組中。在本例中,cust.City 是鍵。

// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
 var queryCustomersByCity =
   from cust in customers
    group cust by cust.City;
 // customerGroup is an IGrouping<string, Customer>
 foreach (var customerGroup in queryCustomersByCity)
 {
   Console.WriteLine (customerGroup.Key);
   foreach (Customer customer in customerGroup)
   {
     Console.WriteLine("   {0}", customer.Name);
   }
 }

在使用 group 子句結束查詢時,結果采用列表的列表形式。列表中的每個元素是一個具 有 Key 成員及根據該鍵分組的元素列表的對象。在循環訪問生成組序列的查詢 時,您必須使用嵌套的 foreach 循環。外部循環用於循環訪問每個組,內部循 環用於循環訪問每個組的成員。

如果您必須引用組操作的結果,可以使 用 into 關鍵字來創建可進一步查詢的標識符。下面的查詢只返回那些包含兩個 以上的客戶的組:

// custQuery is an IEnumerable<IGrouping<string, Customer>>
var custQuery =
  from cust in customers
  group cust by cust.City into custGroup
  where custGroup.Count() > 2
  orderby custGroup.Key
  select custGroup;

聯接

聯接運算創建數據源中沒有顯式建模的序列之間的關聯。例如,您可以執行 聯接來查找符合以下條件的所有客戶:位於巴黎,且從位於倫敦的供應商處訂購 產品。在 LINQ 中,join 子句始終針對對象集合而非直接針對數據庫表運行。 在 LINQ 中,您不必像在 SQL 中那樣頻繁使用 join,因為 LINQ 中的外鍵在對 象模型中表示為包含項集合的屬性。例如,Customer 對象包含 Order 對象的集 合。不必執行聯接,只需使用點表示法訪問訂單:

選擇(投影)

select 子句生成查詢結果並指定每個返回的元素的“形狀”或類 型。例如,您可以指定結果包含的是整個 Customer 對象、僅一個成員、成員的 子集,還是某個基於計算或新對象創建的完全不同的結果類型。當 select 子句 生成除源元素副本以外的內容時,該操作稱為“投影”。使用投影轉 換數據是 LINQ 查詢表達式的一種強大功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved