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