LINQ:開始使用 LINQ(二)- 基本 LINQ 查詢操作

来源:http://www.cnblogs.com/liqingwen/archive/2016/08/20/5788048.html
-Advertisement-
Play Games

開始使用 LINQ (二)- 基本 LINQ 查詢操作 一、獲取數據源:from 在 LINQ 查詢中,第一步是指定數據源。像在大多數編程語言中一樣,在 C# 中,必須先聲明變數,才能使用它。在 LINQ 查詢中,最先使用 from 子句的目的是引入數據源 (customers) 和範圍變數 (cu ...


開始使用 LINQ (二)- 基本 LINQ 查詢操作

 

一、獲取數據源:from

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

1 //queryAllCustomers 是 IEnumerable<Cutsomer> 類型
2 var queryAllCustomers = from cust in customers
3                         select cust;

  範圍變數類似於 foreach 迴圈中的迭代變數,但在查詢表達式中,實際上不發生迭代。執行查詢時,範圍變數將用作對 customers 中的每個後續元素的引用。因為編譯器可以推斷 cust 的類型,所以您不必顯式指定此類型。

 

二、篩選:where

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

  在下麵的示例中,只返回那些地址位於倫敦的 customers。  

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

  

  您可以使用熟悉的 C# 邏輯 AND(&&)和 OR(||) 運算符來根據需要在 where 子句中應用任意數量的篩選表達式。    例如,若要只返回位於“倫敦”和姓名為“Devon”的客戶:
1 where cust.City = "London" && cust.Name = "Devon"

  若要返回位於倫敦或巴黎的客戶:

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

 

三、排序:orderby

  通常可以很方便地將返回的數據進行排序。orderby 子句將使返回的序列中的元素按照被排序的類型的預設比較器進行排序。例如,下麵的查詢可以擴展為按 Name 屬性對結果進行排序。因為 Name 是一個字元串,所以預設比較器執行從 A 到 Z 的字母排序。
1 var queryLondonCustomers = from cust in customers
2                 where cust.City = "London"
3                 orderby cust.Name descending 
4                 select cust;

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

 

四、分組:group

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

 1 var queryLondonCustomers = from cust in customers
 2                 group cust by cust.City;
 3 
 4 foreach (var queryLondonCustomer in queryLondonCustomers)
 5 {
 6    Console.WriteLine(queryLondonCustomer.Key);
 7    foreach (var cust in queryLondonCustomer)
 8    {
 9       Console.WriteLine(cust.Name);
10    }
11 }

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

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

1 //custQuery 是 IEnumable<IGrouping<string, Customer>> 類型
2 var custQuery = from cust in customers
3                 group cust by cust.City
4                 into custGroup
5                 where custGroup.Count() > 2
6                 orderby custGroup.Key
7                 select custGroup;

 

五、聯接:join

  聯接運算創建數據源中沒有顯式建模的序列之間的關聯。例如,您可以執行聯接來查找位於同一地點的所有客戶和經銷商。在 LINQ 中,join 子句始終針對對象集合而非直接針對資料庫表運行。  

1 var innerJoinQuery = from cust in customers
2                   join dist in distributors on cust.City equals dist.City
3                   select new {CustomerName = cust.Name, DistributorName = dist.Name};

  在 LINQ 中,您不必像在 SQL 中那樣頻繁使用 join,因為 LINQ 中的外鍵在對象模型中表示為包含項集合的屬性。例如,Customer 對象包含 Order 對象的集合。不必執行聯接,只需使用點表示法訪問訂單:  

1 from order in Customer.Orders...

 

六、選擇(投影):select

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

 

【來源】本文文字主要摘自微軟官方文檔

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我用的linux操作系統類別是CentOS-6.5 首先在虛擬機選項的設置里設置CD/DVD選項其中勾選Connect at power on選項 在連接中選擇Use ISO image file:即選擇鏡像文件的目錄地址 然後在/root目錄下輸入命令:mount /mnt/cdrom 輸出錯誤為 ...
  • 摘自:http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=7595&extra=page%3D1%26filter%3Dtypeid%26typeid%3D36 1. /etc/passwd由 : 分隔成7個欄位(1) 用戶名 規則:大小 ...
  • 近期我的電腦總是不定時的彈出同城色情交友網站,一彈就是2個頁面,頁面彈出後,發起調用瀏覽器彈出色情網站的主程式自動退出,導致無法查明到底是哪個應用程式發起的彈出頁面視窗,我乾IT工作十多年,一時間認為我的電腦中毒了 ,通過PChunter,Powertools等工具卻沒有發現任何中毒跡象,也沒有異常 ...
  • 本文描述了linux下使用rsync單向同步兩個機器目錄的問題。 使用rsync同步後可以保持目錄的一致性(含刪除操作)。 數據同步方式 從主機拉數據 備機上啟動的流程 同步命令: 參數說明: -a 參數,相當於-rlptgoD(-r 是遞歸 -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件 ...
  • 監控作業發現一臺伺服器(Red Hat Enterprise Linux Server release 5.7)從凌晨1:32開始,有一小段時間無法響應,資料庫也連接不上,後面又正常了。早上檢查了監聽日誌,並沒有發現錯誤信息。但是檢查告警日誌,發現有下麵錯誤信息: Thread 1 advanced... ...
  • 資源表是一個樹形結構,可以設置成2的31次方的層數,Windows 使用了3級: 類型->名稱->語言 其中涉及到四個結構: Data Description Resource Directory Tables (and Resource Directory Entries) A series of... ...
  • 介紹 LINQ(目錄) 語言集成查詢 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一項創新功能。 傳統上,針對數據的查詢都是以簡單的字元串表示,而沒有編譯時類型檢查或 IntelliSense 支持。 此外,您還必須針對以下各種數據源學 ...
  • 開始使用 LINQ (一)- 介紹 LINQ 查詢 查詢是一種從數據源檢索數據的表達式。 隨著時間的推移,人們已經為各種數據源開發了不同的語言;例如,用於關係資料庫的 SQL 和用於 XML 的 XQuery。 因此,開發人員不得不針對他們必須支持的每種數據源或數據格式而學習新的查詢語言。 LINQ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...