C# LINQ
LINQ language-Integrated Query
語言集成查詢,我感覺和sql語句差不多
LINQ 語法不是立馬執行的,不像我們以前的加減乘除等運算啊,它把對它的操作先攢著,只有在用到 這個對象的時候 才會一下全部執行

這個例子,輸出結果在右邊。里面有我們后加的 “Zoe Doe”,他要是前兩句執行了的話,shortNames就已經成型了,只含名字長度<=8的名字,有3個
names 添加一個,跟我shortNames 沒關系,最終的輸出結果應該是3個
但是是4個,這就驗證了我們上面說的話,LINQ 不是立馬執行,而是等在被使用的時刻再執行,這個例子里,names先加了一個元素,然后在foreach里才執行LINQ語句
這種特性,在大容量(liang)數據庫時候有用(yong)(yong),可能人家(jia)一(yi)(yi)(yi)直再往里存(cun)數,你(ni)不用(yong)(yong)管,你(ni)查詢的時候就篩選出來了(le),不用(yong)(yong)存(cun)一(yi)(yi)(yi)個查一(yi)(yi)(yi)個,浪費
上面我們展示了 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) 等
下面舉個復雜點的例子。不僅僅是簡單的int 和 string 對象,加深一下對Where 作用的理解
其實多個邏輯可以分開寫,一眼就知道啥意思,就是代碼太長
這里寫了3個Where,執行效率上沒啥差別,也很直觀,就是稍微長了點,中間用 . 來鏈接多個Where
最后說一句,篩(shai)選出來的(de)數據是(shi)一個新的(de)對象,原(yuan)(yuan)數據一直留(liu)在那(nei)兒,你(ni)不操(cao)作它就(jiu)保持原(yuan)(yuan)樣
排序 OrderBy ThenBy
上面說的Where用來篩選數據,現在說排序,語法都是一樣的,默認是升序,可以改成降序,后面要加個ToList再顯示轉換成原類型
很簡單是吧,但是現實生活中排序不是這么簡單的,比如 總考分相同的考生 按照語數外的分數再排序,這就涉及到多個條件了
多個條件用ThenBy連接,ThenBy多了可以繼續ThenBy