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) 等
下面舉個復雜點的例子。不僅僅是簡單的int 和 string 對象,加深一下對Where 作用的理解
其實多個邏輯可以分開寫,一眼就知道啥意思,就是代碼太長
這里寫了3個Where,執行效率上沒啥差別,也很直觀,就是稍微長了點,中間用 . 來鏈接多個Where
最后說一句,篩選出來的數據是一個新的對象,原數據一直留在那兒,你不操作它就保持原樣
排序 OrderBy ThenBy
上面說的Where用來篩選數據,現在說排序,語法都是一樣的,默認是升序,可以改成降序,后面要加個ToList再顯示轉換成原類型
很簡單是吧,但是現實生活中排序不是這么簡單的,比如 總考分相同的考生 按照語數外的分數再排序,這就涉及到多個條件了
多個條件用ThenBy連接,ThenBy多了可以繼續ThenBy
