在學習C#時,不可避免的會碰到對資料的處理,本文章記錄筆者在學習LINQ對資料處理的方面曾有過的疑惑與後續的了解。
LINQ,全名為 Language Integrated Query
,發音為"link",顧名思義就是指擁有資料查詢能力的語言,是一種將查詢功能整合至以C#語言為基礎之技術的名稱。
主要有兩種查詢寫法:
查詢運算式(Query Expression Syntax)
查詢運算式是一種長得有點像SQL搜尋語法的運算式,範例如下:
標準查詢運算子(Standard Query Operators)
標準查詢運算子,是應用於集合類型的運算子,提供了包括篩選、彙總、排序...等查詢功能,像是Select、Where、JOIN、OrderBy...等方法,範例如下:
這兩種是不是看起來有點像又有點不太一樣!
其實這兩種寫法,在經過Compiler編譯後,編譯出來的結果都是相同的! 所以可以依個人偏好選擇寫法。
下面舉個例子來說明一些細節:
從studentList的集合中,找到其中學生的年齡是介於12歲以及20歲之間的資料,並將學生的姓名以及年齡取出,之後進行輸出。
其中有一些特點:
而上面的查詢運算式程式碼,編譯後結果等同於下面這段標準查詢運算子程式碼:
可以看到有相當多可以探討的地方,例如 物件初始化、匿名型別,以及 LINQ 為什麼能對這些objects、entities 進行操作呢? 那是因為中間有 LINQ Providers 在幫我們做事情! 這些方法詳細的說明要期待後續的文章。
總結:LINQ是一種很強大的整理資料的方法,甚至有文章因為其便利性,用「少了LINQ幾乎不會寫程式」這種說法(笑)。
本篇大概說明LINQ的兩種寫法,因筆者在查詢資料時不太清楚為何會產生出這兩種寫法,他們的差異為何,因此在查詢相關文件後有點解惑,同時做了些整理。
參考資料:
維基百科:https://en.wikipedia.org/wiki/Language_Integrated_Query#Language_extensions
微軟官方文件:https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/concepts/linq/
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/concepts/linq/standard-query-operators-overview
https://docs.microsoft.com/zh-tw/dynamics365/fin-ops-core/dev-itpro/dev-tools/linq-provider-c