C# LINQ


LINQ  language-Integrated Query

語言集成查詢,我感覺和sql語句差不多

LINQ 語法不是立馬執行的,不像我們以前的加減乘除等運算啊,它把對它的操作先攢着,只有在用到 這個對象的時候 才會一下全部執行
  
這個例子,輸出結果在右邊。里面有我們后加的 “Zoe Doe”,他要是前兩句執行了的話,shortNames就已經成型了,只含名字長度<=8的名字,有3個
names 添加一個,跟我shortNames 沒關系,最終的輸出結果應該是3個
但是是4個,這就驗證了我們上面說的話,LINQ 不是立馬執行,而是等在被使用的時刻再執行,這個例子里,names先加了一個元素,然后在foreach里才執行LINQ語句
這種特性,在大容量數據庫時候有用,可能人家一直再往里存數,你不用管,你查詢的時候就篩選出來了,不用存一個查一個,浪費


上面我們展示了 LINQ的兩種語法
Query Syntax    Method syntax

一個是類似sql的query 語法(這是比較流行的寫法,通俗易懂)  一個是method 語法(用到了Lambda 表達式,就是 name => name.Length <= 8這兒)

Lambda 表達式

=> 分開,左邊是參數,可以有多個參數,在上面的例子里是name這個參數,name 只是個形參,隨便寫啥都行,寫x y z 都行,這里寫name只是為了方便,因為list里面存的都是姓名
右邊 是個表達式,其bool結果用來篩選哪些是我們想要的,這里面我們想要 名字長度<=8


Where()  filtering data

Where 用來過濾數據 配合Lambda 表達式。把表達式應用到每個元素,根據表達式的結果 True(留) False(pass) 來過濾數據
這里面的表達式可以是簡單的邏輯n < 10  復雜點的邏輯n > 1 && n != 4 && n < 10   函數返回值excludedNumbers.Contains(n)

下面舉個復雜點的例子。不僅僅是簡單的intstring 對象,加深一下對Where 作用的理解

其實多個邏輯可以分開寫,一眼就知道啥意思,就是代碼太長

這里寫了3個Where,執行效率上沒啥差別,也很直觀,就是稍微長了點,中間用 . 來鏈接多個Where

最后說一句,篩選出來的數據是一個新的對象,原數據一直留在那兒,你不操作它就保持原樣


排序 OrderBy  ThenBy

上面說的Where用來篩選數據,現在說排序,語法都是一樣的,默認是升序,可以改成降序,后面要加個ToList再顯示轉換成原類型

很簡單是吧,但是現實生活中排序不是這么簡單的,比如 總考分相同的考生 按照語數外的分數再排序,這就涉及到多個條件了
多個條件用ThenBy連接,ThenBy多了可以繼續ThenBy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM