程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Linq學習(3) 語法結構(1)

Linq學習(3) 語法結構(1)

編輯:關於C語言

Linq 語法結構

(來自Linq in action)

舉個例子實現:

查詢以a開頭的字符串,按降序輸出。

C#代碼:

string[] list = { "adobe", "Excel", "acer", "query", "async", "xianfen", "apple", "amazon", "player", "best", "wow" };
var result = from Word in list
       where Word.StartsWith("a")
       orderby Word descending
       select Word;
result.ToList().ForEach(str => Console.WriteLine(str));

// 輸出:

// async
// apple
// amazon
// adobe
// acer

等價的面向對象語法為:

var result = list.Where(str => str.StartsWith("a"))
  .OrderByDescending(str => { return str; });

這裡 Where 和 OrderByDescending都是IEnumerable<T>的擴展方法,因為數組類型實現了該接口,所以可以直接調用這些這些擴展方法。

這些擴展方法的實現是在Enumerable類型中實現的,因此,更直接的是調用Enumerable類型的靜態方法方法:

var result =
  Enumerable.OrderByDescending(
  Enumerable.Where(
  list, str => str.StartsWith("a")), str => { return str; }
  );

從這些逆向演化可以看出,查詢語法就是一種"語法糖"。前面提到過,編譯後運行時版本還是2.0,從這可以看出一些端倪。如果想繼續深入了解該實現可以用ILDASM查看IL源代碼和反射類庫源代碼。

result類型為IEnumerable<TElement>或派生自IEnumerable<TElement>接口的類型。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved