C# – LINQ & Lambda

最近好陣子前同事介紹了LINQ這個玩意給我,一看不得了,這神玩意哪!
以我的理解來說,他就是一個整合過的查詢語法。
在.NET的環境下,就可以使用同一種語法,對多種資料來源做搜尋,何樂不為?

另一個是Lambda這個玩意,就是匿名函式的精簡極致版,整個帥氣!
與LINQ合作,縱橫武林無人可擋哪!

LINQ的架構

在「何謂LINQ?該如何替LINQ下一個較為貼切的定義呢?」裡面有一張示意圖可以清楚讓人了解。

var query = from Student student in arrList
            where student.Scores[0] > 95
            select student;

LINQ的效能及安全性

[.NET] LINQ 的延遲執行 (Deferred Execution)
當心LINQ搜尋的效能陷阱

其他

引用 System.Linq 之後,大多數常用的容器(集合)物件都會多出LINQ的擴充方法,在某些場合下,直接使用擴充方法會比直接使用LINQ語法容易理解(個人觀感)。

※擴充方法(extension methods)是個有趣的東西,也就是關鍵字 this 在3.0加入的新用法。可參考這篇「C# 筆記:擴充方法」。

假設要延伸 string 的功能…

public static class StringExt
{
    public static int ConvertToInt(this string _ori)
    {
        int output;

        if(int.TryParse(_ori, out output))
        { return output; }
        else
        { return int.MinValue; }
    }
}

Lambda

「運算式 Lambda」(Expression Lambda) 基本形式:
(input parameters) => expression

可衍伸到下列狀況:

  • (x, y) => x == y
  • (int x, MyClass c) => c.Score += x
  • () =>  SomeMethod()
  • x => x * x    // 這是在參數只有一個的狀況下可以使用

「陳述式 Lambda」(Satement Lambda)基本形式:
(input parameters) => {statement;}

用於超出一行陳述時使用,通常也不會(或是說不應該?)超過三行。

  • n => { string s = n + " “ + “World"; Console.WriteLine(s); };

LINQ自學筆記-打地基-Lambda 運算式

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s