走進Linq-Linq to Objects(上)基礎篇

作者: 橫刀天笑  來源: 博客園  發布時間: 2008-09-23 18:18  閱讀: 13055 次  推薦: 3   原文鏈接   [收藏]  
 
[1] 走進Linq-Linq to Objects(上)基礎篇
[2] 走進Linq-Linq to Objects(上)基礎篇

系列文章導航:

走進Linq--Linq橫空出世篇

走進Linq-輝煌的背后

走進Linq-Linq大觀園

不能不說的C#特性-對象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴展方法

不能不說的C#特性-匿名方法和Lambda表達式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產品

不能不說的C#特性-迭代器(下),yield以及流的延遲計算

走進Linq-Linq to Objects(上)基礎篇

走進Linq-Linq to Objects(下)實例篇

走進Linq-Linq to SQL感性認識篇

走進Linq-Linq to SQL How do I(1)

走進Linq-Linq to SQL How do I(2)

走進Linq-Linq to SQL How do I(3)

走進Linq-How do I(4)拾遺補零篇第一節

走進Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進Linq-Linq to SQL源代碼賞析之Provider的初始化

走進Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq

 

話說自從編程大師走了后年輕的Coder很是郁悶了一會兒,他在想,為什么,我還以為是一個偉大的工程,我正準備把我寫的代碼作為一個opensouce project 分享出去,微軟卻干了。哎,還是要被微軟牽著鼻子走一遭了。

在上一章里介紹了,Linq里那些查詢操作都是給IEnumerable接口添加的擴展方法(這些方法在Linq里被稱為查詢操作符),那么就可以以方法調用的方式使用Linq了:

books.Where(book=>book.Title.StartsWith(“L”)).OrderBy(book=>book.Price).Select(book=>new{key=book.Title,value=book.Price};

注意到沒有,上面所有的方法都是操作IEnumerable的,然后也是返回IEnumerable類型的對象。可以把這些方法按照用途分個類(一些一看名字就知道意思的我就不做過多說明了)

用途

方法

映射的(就是將查詢的結果映射成需要的結果)

Select(2個重載),SelectMany(4個重載)

條件過濾

Where(2個重載)OfType(這個方法是對IEnumerable擴展的,使用的時候要帶上泛型參數,books.OfType(),意思就是從books集合里遍歷元素,如果這個元素是Book類型或其子類型就將其添加到返回集合中)

排序(注意排序的方法放回的是繼承自IEnumerableIOrderedEnumerable)

OrderBy(2個重載), OrderByDescending(2個重載), Reverse(不干別的,就是把IEnumerable的順序倒一下), ThenBy, ThenByDescending(這兩個是對IOrderedEnumerable的擴展方法,所以它只能用在OrderBy后面,它的作用就是在一個已排序的系列上再按照某個key排序一次)

分組

GroupBy(8個重載), ToLookup(4個重載,它們的作用是根據一個keyIEnumerable轉化為一個ILookUp對象,這個對象將按照key分組元素)

聯結

GroupJoin,Join

轉型

Cast(Linq只能操作泛型的集合!誰告訴你Linq只能操作泛型的集合?這個方法就是干這事情的,它是對IEnumerable擴展的一個方法,將一個IEnumerable轉型為IEnumerable,然后你就可以享受Linq了,比如我用ArrayList保存一個User集合,ArrayList users = new ArrayList();但是Linq的那些什么Where啊,并沒有對ArrayList所實現的接口IEnumerable進行擴展,怎么辦?CastIEnumerable myUsers = users.Cast();就這么簡單)

但是微軟的哥們認為這種方式還是不人本化(或者那些哥們說,這樣顯得Linq太簡單了,就添加幾個擴展方法,顯得咱們多沒水平啊),如是他們弄出個“查詢表達式”的玩意兒,像俺們這群搞C語系搞多了的人,突然一下子在C#里看到什么from啊,什么select啊,還真有點不習慣,那下面我們就來看看這個查詢表達式到底是個啥玩意兒。

 

[第1頁][第2頁]
3
0
 
標簽:linq objects
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()