lambda高級查詢

  • 2020 年 6 月 29 日
  • 筆記
1. 什麼是lambda表達式

    Lambda 表達式,是一種簡化的匿名函數,可用於創建委託或表達式目錄樹。

    其次,也可以將 Lambda 表達式作為參數進行傳遞,或者將它作用於函數調用值調用後返回的一個函數來使用。 經常在 LINQ 中使用 Lambda 表達式。

2. Lambda的組成

 

3. Lambda表達式

   表達式在 => 運算符右側,稱「lambda 表達式」。lambda 表達式常用於 LINQ 和構建表達式樹,它也允許返回結果。

   基本形式:( 輸入參數 ) => 表達式 。

   1) ( ) => true;

   2) x => x == 1;

   3) (x) => x == 1;

   4) (x, y) => x == y;

 

   當 lambda 表達式有且只有一個輸入參數的時侯,括弧(「()」)才是可選的。 括弧記憶體在多個輸入參數時使用「,」進行分割。

   也可以選擇顯式指定類型,一般只有在編譯器難以或無法準確推斷輸入類型的時候。

4. Lambda語句

   lambda 語句和上面的 lambda 表達式相比,只是多了個大括弧(「{ }」)。  

   基本形式:( 輸入參數 ) => { 表達式 } 。

5. 非同步Lambda

   通過 async 和 await 關鍵字,我們可以很簡單並快速的創建包含非同步處理的 lambda 表達式和語句。

   1) Async

   2) Await

6. Linq中使用Lambda

   許多 LINQ 中的參數都是一種委託類型的參數,如 Func<T, TResult>,可以定義輸入參數以及返回類型。

   public delegate TResult Func<TArg0, TResult>(TArg0 arg0)  

   Func<int, bool> 表示:int 為輸入參數,bool 為返回值。

   Func<int, int, bool> 表示:2個 int 為輸入參數,一個 bool 為返回值。

示例:

  1) Func<int, bool> myFunc = x => x == 250;  

  2) var result = myFunc(1314);

 

  C# 的編譯器可以自動推斷輸入參數的類型,即便是多個輸入參數,當然,也可以選擇顯式指定。

  1) var nums = new[] { 2, 5, 0 };

  2) var query = nums.Count(x => x > 2);

  3) var query2 = nums.Count<int>(x => x < 2);

7. Lambda中的類型推斷

          編譯器會根據 Lambda 主體、參數的委託類型以及 C# 語言規範和其它等一些因素,對所寫的 Lambda 進行類型推斷。

         

         由於源數據是一個 int 數組,即我要查的數據為 IEnumerable<int> 類型,編譯器在這裡自動推斷元素為 int 類型,

        意味著 Count 方法內的 x 你可以通過 「.」 在 VS 中顯示對應 int 類型的屬性和方法。

8. Lambda的特點

   1) Lambda 中包含輸入參數的數量,必須與委託類型包含的參數數量一致。

   2) Lambda 中的每個輸入參數,必須都能夠通過隱式轉換為其對應的委託參數類型

   3) Lambda 中的返回值(如果有),必須能夠隱式轉換為委託的返回類型

 

 

     喜歡的可以點個贊!