選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
2 分鐘閱讀時間 (320 個字)

LINQ基本介紹

LINQ

在學習C#時,不可避免的會碰到對資料的處理,本文章記錄筆者在學習LINQ對資料處理的方面曾有過的疑惑與後續的了解。

LINQ,全名為 Language Integrated Query,發音為"link",顧名思義就是指擁有資料查詢能力的語言,是一種將查詢功能整合至以C#語言為基礎之技術的名稱。

主要有兩種查詢寫法:

 查詢運算式(Query Expression Syntax)

 查詢運算式是一種長得有點像SQL搜尋語法的運算式,範例如下:

from word in words
select word.key;   

標準查詢運算子(Standard Query Operators) 

 標準查詢運算子,是應用於集合類型的運算子,提供了包括篩選、彙總、排序...等查詢功能,像是Select、Where、JOIN、OrderBy...等方法,範例如下:

words
    .Select(word => word.key) 

這兩種是不是看起來有點像又有點不太一樣! 

其實這兩種寫法,在經過Compiler編譯後,編譯出來的結果都是相同的! 所以可以依個人偏好選擇寫法。

下面舉個例子來說明一些細節:

var teenStudents = from s in studentList
                   where s.Age > 12 && s.Age < 20
                   select new { StudentName = s.StudentName, Age = s.Age };

foreach (var student in teenStudents)
{
        Console.WriteLine(student);
} 

從studentList的集合中,找到其中學生的年齡是介於12歲以及20歲之間的資料,並將學生的姓名以及年齡取出,之後進行輸出。

其中有一些特點:

var teenStudents // 宣告變數
    = from s in studentList  // 查詢運算式
      where s.Age > 12 && s.Age < 20
      select new { StudentName = s.StudentName, Age = s.Age }; // 利用匿名型別(Anonymous type)建立物件 

而上面的查詢運算式程式碼,編譯後結果等同於下面這段標準查詢運算子程式碼:

var teenStudents =
     studentList
        .Where(s => (s.Age > 12 && s.Age < 20))    // Lambda表達式 (Lambda expression)
        .Select(x => new {x.StudentName, x.Age});

teenStudents.ToList().ForEach(s => Console.WriteLine(s));})    //Lambda Statement 

可以看到有相當多可以探討的地方,例如 物件初始化、匿名型別,以及 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

Azure Event Grid
[.Net Core] 使用 MailKit 發送郵件

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/18, 週六

Captcha 圖像