自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linq Lambda表達(dá)式詳細(xì)介紹

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

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

C#3.0時代的Linq查詢語句

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

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

  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. );  

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

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

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

C#3.0用擴(kuò)展方法(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寫成一個通用函數(shù):

  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. //現(xiàn)在我們可以篩選我們希望的任何類型了!  
  13.  
  14. int [] a = new int [] {1,2,3,4,5};  
  15. a.Filter(i => i==1 || i==3);  
  16.  
  17. //這個篩選方法是如此有用且通用,C#里已經(jīng)內(nèi)置了一個稱為Where的實現(xiàn)  
  18. //在PDC上展示的實際的Where實現(xiàn)  
  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查詢二維數(shù)組淺析
  2. 學(xué)習(xí)Linq經(jīng)驗總結(jié)
  3. Linq修改XML文檔描述
  4. Linq延時執(zhí)行全面分析
  5. Linq實現(xiàn)Left join
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-09-11 09:48:27

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 09:09:50

Lambda表達(dá)式Linq查詢

2009-09-09 17:14:17

Linq lambda

2009-09-17 09:15:49

Linq表達(dá)式樹

2009-07-03 18:31:04

JSP表達(dá)式

2022-11-29 11:00:04

Lambda表達(dá)式Java

2011-06-16 15:40:28

正則表達(dá)式

2009-09-09 17:45:07

Linq表達(dá)式

2009-09-17 14:21:19

LINQ表達(dá)式

2011-06-16 16:05:23

正則表達(dá)式

2009-09-11 12:32:33

LINQ表達(dá)式

2009-09-10 15:35:07

LINQ查詢表達(dá)式

2011-10-28 16:34:13

LINQ

2022-12-05 09:31:51

接口lambda表達(dá)式

2009-09-17 11:08:55

LINQ查詢表達(dá)式

2009-08-27 09:13:28

LINQ查詢表達(dá)式
點贊
收藏

51CTO技術(shù)棧公眾號