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

Linq Lambda表達式詳細介紹

開發 后端
這里介紹C#3.0提供了Linq Lambda表達式的概念,你可以把Linq Lambda表達式是我們應用匿名委托的捷徑,下面是用Linq Lambda表達式重寫的查詢。

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

C#3.0時代的Linq查詢語句

在C#3.0中我們又有了改善代碼的新工具。

匿名委托很不錯,但是我們希望有更簡單的,更容易維護的代碼。C#3.0提供了Linq Lambda表達式的概念,你可以把Linq Lambda表達式是我們應用匿名委托的捷徑,下面是用Linq Lambda表達式重寫的查詢:

  1. static IEnumerable<Employee> 
  2. GoldWatch(IEnumerable<Employee> employees) {  
  3. return Filter(employees,  
  4. employee => employee.Years>3  
  5. );  
  6. }  
  7.    
  8. static IEnumerable<Employee> 
  9. SalesForce(IEnumerable<Employee> employees) {  
  10. return Filter(employees,  
  11. employee => employee.Department=="Sales"  
  12. );  

這段代碼相當簡單而且也很容易維護,但還存在一些問題。
◆GoldWatch(employees)
◆SalesForce(employees)

當你看到這樣的調用的時候就會意識到這個問題,從OO的視角來看,我們已經熟悉了noun.verb()這樣的調用形式,理想情況下,我們希望用這樣的語法能查詢一個集合:
◆employees.GoldWatch()
◆employees.SalesForce()

有人可能會定義一個新的Employee類,它實現了IEnumerable<Employee>。但是問題是,我們的用戶可能會希望是用別的 IEnumerable<Employee>實現,比如Employee[]和List<Employee>。

C#3.0用擴展方法(Extension method)解決這個方法:

  1. static IEnumerable<Employee> 
  2. Filter(this IEnumerable<Employee> employees, Choose choose) {  
  3. foreach (Employee employee in employees) {  
  4. if (choose(employee)) {  
  5. yield return employee;  
  6. }  
  7. }  
  8. }  
  9.    
  10. static IEnumerable<Employee> 
  11. GoldWatch(this IEnumerable<Employee> employees) {  
  12. return employees.Filter(employee => employee.Years>3);  
  13. }  
  14.  
  15. static IEnumerable<Employee> 
  16. SalesForce(this IEnumerable<Employee> employees) {  
  17. return employees.Filter(  
  18. employee => employee.Department=="Sales");  

這看起來很好了,但如果我們想象Employee一樣查詢Customer呢?或者說,查詢我們的存貨呢?

不用為每一個類單獨寫一個Filter方法,我們可以將Filter寫成一個通用函數:

  1. delegate bool Choose<T>(T t);  
  2.  
  3. static IEnumerable<T> 
  4. Filter<T>(this IEnumerable<T> items, Choose<T> choose) {  
  5. foreach (T item in items) {  
  6. if (choose(item)) {  
  7. yield return item;  
  8. }  
  9. }  
  10. }  
  11.  
  12. //現在我們可以篩選我們希望的任何類型了!  
  13.  
  14. int [] a = new int [] {1,2,3,4,5};  
  15. a.Filter(i => i==1 || i==3);  
  16.  
  17. //這個篩選方法是如此有用且通用,C#里已經內置了一個稱為Where的實現  
  18. //在PDC上展示的實際的Where實現  
  19.  
  20. public delegate T Func<A0, T>(A0 arg0);  
  21.  
  22. public static  
  23. IEnumerable<T> Where<T>(this IEnumerable<T> source,  
  24. Func<T, bool> predicate) {  
  25. foreach (T element in source) {  
  26. if (predicate(element)) yield return element;  
  27. }  

【編輯推薦】

  1. Linq查詢二維數組淺析
  2. 學習Linq經驗總結
  3. Linq修改XML文檔描述
  4. Linq延時執行全面分析
  5. Linq實現Left join
責任編輯:佚名 來源: 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-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-09 17:14:17

Linq lambda

2009-09-17 09:09:50

Lambda表達式Linq查詢

2009-09-17 09:15:49

Linq表達式樹

2009-07-03 18:31:04

JSP表達式

2022-11-29 11:00:04

Lambda表達式Java

2009-09-11 12:32:33

LINQ表達式

2011-10-28 16:34:13

LINQ

2009-09-10 15:35:07

LINQ查詢表達式

2011-06-16 16:05:23

正則表達式

2009-09-09 17:45:07

Linq表達式

2009-09-17 14:21:19

LINQ表達式

2011-06-16 15:40:28

正則表達式

2022-12-05 09:31:51

接口lambda表達式

2009-09-07 17:18:33

LINQ查詢表達式

2009-09-11 09:53:16

Linq查詢表達式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97精品超碰一区二区三区 | 99精品视频免费观看 | 久久精品毛片 | 国产成人综合一区二区三区 | 波多野结衣亚洲 | 久久精品国产一区二区 | 在线观看涩涩视频 | 久久久精品| 国产伦精品一区二区三毛 | 在线日韩在线 | 国产欧美日韩在线一区 | 国产视频久久 | 日日夜夜精品 | 国产色| 免费看国产一级特黄aaaa大片 | 精品视频在线播放 | 日韩成人免费视频 | 亚洲人成在线观看 | 91视频88av| 欧美精品1区2区3区 免费黄篇 | 中文字幕国产视频 | 日韩中文字幕在线视频 | 欧美精品一区三区 | 91精品国产乱码久久久久久久久 | 国内自拍偷拍一区 | 久久久国产一区二区三区 | av电影一区二区 | 96国产精品久久久久aⅴ四区 | 日韩成人av在线播放 | 成人高潮片免费视频欧美 | 看片wwwwwwwwwww | 老牛嫩草一区二区三区av | 亚洲一区二区三区免费在线观看 | 国产男女精品 | 免费观看成人性生生活片 | 亚洲国产成人精品女人久久久 | 99久久免费观看 | 欧美一卡二卡在线 | 国产激情亚洲 | 国产91精品久久久久久久网曝门 | 亚洲成人一区 |