成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Lambda表達式和Linq查詢淺析

開發 后端
這里介紹Lambda表達式和Linq查詢,我們現在想給ClassCollection增加一個過濾方法,方法的目的是能夠過濾返回班級名稱為“終極一班”的集合來。

Linq有很多值得學習的地方,這里我們主要介紹Lambda表達式和Linq查詢,包括介紹Filter方法等方面。

Lambda表達式和Linq查詢

接下來我們通過一個例子來看一下Lambda表達式和Linq查詢的關系:我們現在想給ClassCollection增加一個過濾方法,方法的目的是能夠過濾返回班級名稱為“終極一班”的集合來。

1.首先給MyExtention增加這么一個靜態方法:

  1. public static ClassCollection Filter(this ClassCollection classes)  
  2. {  
  3. var newnewlist = new ClassCollection();  
  4. foreach (var item in classes)  
  5. {  
  6. if (item.Name=="終極一班")  
  7.  
  8. {  
  9. newlist.Add(item);  
  10. }  
  11. }  
  12. return newlist;  
  13. }  
  14.  
  15. private static void LambdaLinq()  
  16. {  
  17. var classes = GetClasses();  
  18. //var students = GetStudents();  
  19. //0 原始版本  
  20. var result = classes.Filter();  
  21. foreach (var item in result)  
  22. }  
  23. Console.WriteLine(item.ID+ " " + item.Name);  
  24. }  
  25.  
  26. }  
  27.  
  28. //相關的工廠方法:  
  29.  
  30. static ClassCollection GetClasses()  
  31. {  
  32. return new ClassCollection{  
  33. new Class(1){ Name = "終極一班"},  
  34. new Class(2){ Name = "終極二班"},  
  35. };  
  36. }  

2.現在需求發生了變化,需要上面的紅色部分需要發生變化,也就是說我們希望這個查詢條件可以在我們調用Filter方法的時候動態的指定,這時候我們可以把這個變化封裝成一個接口,當然還可以封裝成一個委托,這是.net的非常好用的獨有特性,委托的最直接的作用可以把一個具體的方法引用封裝成一個變量傳遞。好,開始變形!

  1. delegate bool FilterHandler(Class c);   
  2. //注意這個要放到namespace下面,不要放到Program類里面  
  3.  
  4. public static ClassCollection Filter(this ClassCollection classes,FilterHandler f)  
  5. {  
  6. var newnewlist = new ClassCollection();  
  7. foreach (var item in classes)  
  8. {  
  9. if (f(item))  
  10.  
  11. {  
  12. newlist.Add(item);  
  13. }  
  14. }  
  15. return newlist;  
  16. }  
  17.  
  18. static bool F(Class c)  
  19. {  
  20. return c.Name == "終極一班";  
  21. }  
  22.  
  23. private static void LambdaLinq()  
  24. {  
  25. var classes = GetClasses();  
  26. // C#1.0 使用委托封裝過濾條件  
  27. FilterHandler f=new FilterHandler(F);  
  28. var result = classes.Filter(f);  
  29. foreach (var item in result)  
  30. {  
  31. Console.WriteLine(item.ID+ " " + item.Name);  
  32. }  
  33.  
  34. }

我們聲明了一個委托FilterHandler,只要滿足這個委托的方法我們都可以傳遞給Filter方法,這樣就實現了動態的改變查詢條件的目的,F方法內部可以是任意的查詢條件比如return c.Name != "終極一班";同時我們不需要改變Filter方法內部穩定的部分。

3.c#2.0里面也支持直接把一個方法傳給一個委托,但本質上也是編譯器把方法轉換成了一個委托,例如上面:

  1. private static void LambdaLinq()  
  2. {  
  3. var classes = GetClasses();  
  4. // C#2.0 直接傳遞方法  
  5. var result = classes.Filter(F);  
  6. foreach (var item in result)  
  7. {  
  8. Console.WriteLine(item.ID+ " " + item.Name);  
  9. }  
  10.  
  11. }  

4.C#2.0里面有個新特性,叫匿名方法,我們可以直接傳遞匿名方法:

  1. private static void LambdaLinq()  
  2. {  
  3. var classes = GetClasses();  
  4. // C#2.0 傳遞匿名方法  
  5. var result = classes.Filter(delegate(Class c) { return c.Name == "終極一班"; });  
  6. foreach (var item in result)  
  7. {  
  8. Console.WriteLine(item.ID+ " " + item.Name);  
  9. }  
  10.  
  11. }  

好,變形到這里,我們發現這個匿名其實不僅僅可以給我們帶來不用給方法命名的好處,在這個方法內部我們還可以使用外部上下文環境的變量成員,這個特性也叫“閉包(Closure)”,JavaScript也支持這個特性,比如:

  1. private static void LambdaLinq()  
  2. {  
  3. var classes = GetClasses();   
  4.  
  5. string className = "終極一班";  
  6. // C#2.0 傳遞匿名方法  
  7.  
  8. var result = classes.Filter(delegate(Class c) { return c.Name == className; });  
  9. foreach (var item in result)  
  10. {  
  11. Console.WriteLine(item.ID+ " " + item.Name);  
  12. }  
  13.  
  14. }  

以上介紹Lambda表達式和Linq查詢。

【編輯推薦】

  1. LINQ to SQL查詢分析
  2. LINQ查詢架構簡單介紹
  3. LINQ to SQL映射關系概述
  4. LINQ To SQL對象模型淺析
  5. LINQ to SQL映射列描述
責任編輯:佚名 來源: IT168
相關推薦

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2009-09-11 09:48:27

Linq Lambda

2009-09-09 17:45:07

Linq表達式

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-09-09 17:14:17

Linq lambda

2011-10-28 16:34:13

LINQ

2009-09-10 15:35:07

LINQ查詢表達式

2009-09-07 17:18:33

LINQ查詢表達式

2009-09-11 09:53:16

Linq查詢表達式

2009-08-27 09:13:28

LINQ查詢表達式

2009-09-17 11:08:55

LINQ查詢表達式

2009-09-11 12:32:33

LINQ表達式

2009-09-17 14:21:19

LINQ表達式

2022-12-05 09:31:51

接口lambda表達式

2009-09-17 09:15:49

Linq表達式樹

2009-06-12 09:44:04

LINQ查詢復合from子句

2009-08-10 17:11:34

.NET 3.5擴展方Lambda表達式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色片亚洲 | 国产片一区二区三区 | 色婷婷一区二区三区四区 | 99精品视频在线观看 | 欧美一级电影免费 | aa级毛片毛片免费观看久 | 日韩爱爱网| 久久夜色精品国产 | 久久国产成人 | 亚洲一区二区三区免费在线观看 | 日韩一区二区免费视频 | 99久久婷婷国产综合精品首页 | 日本字幕在线观看 | 特一级黄色毛片 | 久久久国产一区二区三区四区小说 | 日日摸天天添天天添破 | 欧美一区二区三区四区视频 | 亚洲一区在线观看视频 | 一区二区在线看 | 亚洲一区二区三区视频 | 国产精品区二区三区日本 | 色免费在线视频 | 色视频免费 | 美女一区| 一区二区福利视频 | 99精品国产一区二区三区 | 中文字幕三区 | 欧美色综合一区二区三区 | 在线视频国产一区 | 国产清纯白嫩初高生视频在线观看 | 日韩一二区 | 亚洲第一在线 | 国产在线精品一区二区三区 | 国产精品久久久久久久久久久久久 | 自拍偷拍中文字幕 | 日韩综合在线 | 久久综合狠狠综合久久综合88 | 国产在线观看 | 九九九视频在线观看 | 色在线看 | 最新中文字幕在线 |