LINQ:開始使用 LINQ(一)- 介紹 LINQ 查詢

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

開始使用 LINQ (一)- 介紹 LINQ 查詢 查詢是一種從數據源檢索數據的表達式。 隨著時間的推移,人們已經為各種數據源開發了不同的語言;例如,用於關係資料庫的 SQL 和用於 XML 的 XQuery。 因此,開發人員不得不針對他們必須支持的每種數據源或數據格式而學習新的查詢語言。 LINQ ...


開始使用 LINQ (一)- 介紹 LINQ 查詢

  查詢是一種從數據源檢索數據的表達式。 隨著時間的推移,人們已經為各種數據源開發了不同的語言;例如,用於關係資料庫的 SQL 和用於 XML 的 XQuery。 因此,開發人員不得不針對他們必須支持的每種數據源或數據格式而學習新的查詢語言。 LINQ 通過提供一種跨數據源和數據格式使用數據的一致模型,簡化了這一情況。在 LINQ 查詢中,始終會用到對象。可以使用相同的編碼模式來查詢和轉換 XML 文檔、SQL 資料庫、ADO.NET 數據集、.NET 集合中的數據以及對其有 LINQ 提供程式可用的任何其他格式的數據。  

一、查詢操作的三個部分

  1.操作三部曲:

          (1)獲取數據源           (2)創建查詢           (3)執行查詢
 1 internal class Program
 2 {
 3         private static void Main(string[] args)
 4         {
 5             //1.獲取數據源
 6             var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
 7 
 8             //2.創建查詢
 9             var numQuery =
10                 from num in nums
11                 where (num % 2) == 0
12                 select num;
13 
14             //3.執行查詢
15             foreach (var num in numQuery)
16             {
17                 Console.WriteLine("{0}", num);
18             }
19         }
20 }

 

  下圖顯示了完整的查詢操作。在 LINQ 中,查詢的執行與查詢本身截然不同;換句話說,查詢本身指的是只創建查詢變數,不檢索任何數據。

 

二、數據源

    在上一個示例中,由於數據源是數組,因此它隱式支持泛型 IEnumerable<T> 介面。 支持 IEnumerable<T> 或派生介面(如泛型 IQueryable<T>)的類型稱為可查詢類型。  

    可查詢類型不需要進行修改或特殊處理就可以用作 LINQ 數據源。如果源數據還沒有作為可查詢類型出現在記憶體中,則 LINQ 提供程式必須以此方式表示源數據。  例如,LINQ to XML 將 XML 文檔載入到可查詢的 XElement 類型中:
1 //從 XML 中創建數據源
2 //using System.Xml.Linq;
3 var contacts = XElement.Load(@"c:\xxx.xml");

    在 LINQ to SQL 中,首先需要創建對象關係映射。 針對這些對象編寫查詢,然後由 LINQ to SQL 在運行時處理與資料庫的通信。在下麵的示例中,Customers 表示資料庫中的特定表。  

1 var  db = new Northwnd(@"c:\northwnd.mdf");
2 
3 //查詢在倫敦的客戶
4 var custQuery =
5     from cust in db.Customers
6     where cust.City == "London"
7     select cust;

    

三、查詢

  查詢指定要從數據源中檢索的信息。 查詢還可以指定在返回這些信息之前如何對其進行排序、分組和結構化。 查詢存儲在查詢變數中,並用查詢表達式進行初始化。

  之前的示例中的查詢是從整數數組中返回所有的偶數。 該查詢表達式包含三個子句:fromwhere 和 select。(如果您熟悉 SQL,您會註意到這些子句的順序與 SQL 中的順序相反。)from 子句指定數據源,where 子句指定應用篩選器,select 子句指定返回的元素的類型。 目前需要註意的是,在 LINQ 中,查詢變數本身不執行任何操作並且不返回任何數據。 它只是存儲在以後某個時刻執行查詢時為生成結果而必需的信息。  

四、查詢執行

  1.延遲執行

    如前所述,查詢變數本身只是存儲查詢命令。  實際的查詢執行會延遲到在 foreach 語句中迴圈訪問查詢變數時發生。 此概念稱為“延遲執行”。

  2.強制立即執行

    對一系列源元素執行聚合函數的查詢必須首先迴圈訪問這些元素。CountMaxAverage 和 First 就屬於此類查詢。由於查詢本身必須使用 foreach 以便返回結果,因此這些查詢在執行時不使用顯式 foreach 語句。另外還要註意,這些類型的查詢返回單個值,而不是 IEnumerable 集合。 

var numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

var evenNumQuery =
    from num in numbers
    where (num % 2) == 0
    select num;

var evenNumCount = evenNumQuery.Count();

 

    若要強制立即執行任意查詢並緩存其結果,可以調用 ToList<TSource> 或 ToArray<TSource> 方法。

1 var numQuery2 =
2        (from num in numbers
3         where (num % 2) == 0
4         select num).ToList();
5 
6 var numQuery3 =
7       (from num in numbers
8        where (num % 2) == 0
9         select num).ToArray();

    此外,還可以通過在緊跟查詢表達式之後的位置放置一個 foreach 迴圈來強制執行查詢。但是,通過調用 ToList 或 ToArray,也可以將所有數據緩存在單個集合對象中。  

 

【來源】本文文字和部分圖片主要摘自微軟官方文檔。

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

-Advertisement-
Play Games
更多相關文章
  • 摘自:http://www.apelearn.com/bbs/thread-6658-1-1.html passwd -l 鎖定賬戶,在密碼字元串的前面加上!。 passwd -u是去掉密碼字元串前面的!。 usermod -L 預設只是鎖定密碼,在密碼字元串前面加!。 usermod -U預設只是 ...
  • 我用的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 支持。 此外,您還必須針對以下各種數據源學 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...