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

Ordering方法實現Linq排序

開發 后端
在本地查詢中, 鍵選擇器本身會通過他們默認的IComparable實現來決定Linq排序算法. 我們可以通過提供一個IComparer對象來覆蓋默認的排序算法, 以下示例表示要執行一個大小寫無關的排序。

Linq排序方法有多種,本文只介紹Linq排序Ordering方法,要想輕輕松松的學習Linq排序是很容易實現的,但是要仔細讀此文章哦!

主要方法:

OrderBy, ThenBy: 正序排列輸入序列, SQL對應語法為ORDER BY

OrderByDescending, ThenByDescending: 倒序排列輸入序列, SQL對應語法為ORDER BY … DESC

Reverse: 反轉輸入序列, 無SQL對應語法

Linq排序操作符返回不同順序但與輸入序列相同的元素

OrderBy, OrderByDescending參數:

輸入序列: IEnumerable

主鍵選擇器: TSource => TKey

返回類型是IOrderedEnumerable

ThenBy, ThenByDescending參數:

輸入序列: IOrderedEnumerable

主鍵選擇器:TSource => TKey

簡要介紹:

OrderBy返回輸入序列的一個排序版本, 其使用keySelector表達式作比較. 以下的例子返回了按字母排序的名字列表:

  1. IEnumerable<string> query = names.OrderBy(n => n); 

此例子則是按名字長度進行Linq排序:

  1. IEnumerable<string> query = names.OrderBy (n => n.Length); 

如果元素具有相同的排序鍵那么它們的順序可能是不確定的 – 除非你增加一個ThenBy操作符:

  1. string[] names =   
  2. {“James”, “Jack”, “Todd”, “David”, “Kobe”};   
  3. IEnumerable<string> query = names.OrderBy (n => n.Length).ThenBy (n => n);   
  4. //{Jack,Todd,Kobe,James,David}  

ThenBy只會重新排列那些擁有同樣排序鍵的元素.你可以串聯任意多個ThenBy操作符,如下示例:

  1. IEnumerable<string> query = names.OrderBy (s => s.Length)   
  2. ThenBy (s => s[1]).ThenBy (s => s[0]); 

先按名字長度排序, 再按第2個字符排序, 最后再按第1個字符排序, 其對應的復合查詢為:

  1. IEnumerable<string> query = from s in names   
  2. rderby s.Length, s[1], s[0] 4:  5: elect s;  

Linq排序另外也提供了OrderByDescending和ThenByDescending操作符,生成一個倒序的結果集,以下的Linq to SQL的示例表示按照價格倒序再按描述的字母順序排列:

  1. dataContext.Purchases.OrderByDescending  
  2. p => p.Price) .ThenBy (p =>p.Description); 

復合語法為:

  1. from p in dataContext.Purchases   
  2. orderby p.Price descending, p.Description   
  3. select p; 

Comparers和Collations

在本地查詢中, 鍵選擇器本身會通過他們默認的IComparable實現來決定Linq排序算法. 我們可以通過提供一個IComparer對象來覆蓋默認的排序算法, 以下示例表示要執行一個大小寫無關的排序:

  1. names.OrderBy (n => n, StringComparer.CurrentCultureIgnoreCase); 

在復合查詢中不支持傳遞Comparer,同樣Linq to SQL當中也不支持. 在Linq to SQL當中, 比較算法是由對應列的collation決定的. 如果collation是大小寫敏感的,你可以通過在鍵選擇器中調用ToUpper來完成非大小寫敏感的Linq排序:

  1. from p in dataContext.Purchases   
  2. orderby p.Description. ToUpper()   
  3. select p; 

IOrderedEnumerable與IOrderedQueryable

排序操作符返回了特殊的IEnumerable子類, 如果是Enumerable那么則對應是IOrderedEnumerable,如果是Queryable,則返回的是IOrderedQueryable類. 這些子類型允許使用一個后來的ThenBy操作符繼續提煉而不是代替之前的排列順序.

這些子類型定義的成員并非公開暴露的, 因此他們看起來像是原始序列.

但實際上他們是不同類型, 當我們漸進創建查詢的時候就可以發現:

  1. IOrderedEnumerable<string> query1 = ames.OrderBy (s => s.Length);   
  2.  OrderedEnumerable<string> query2 =uery1.ThenBy (s => s); 

如果我們使用IEnumerable帶來query1現有的生命,那么第二行將無法編譯—ThenBy需要一個IOrderedEnumerable類型的輸入.當然, 使用var可以免去這個擔心:

  1. var query1 = names.OrderBy (s =>s.Length);   
  2. var query2 = query1. ThenBy (s => s); 

然而, 使用隱式類型可能也會有一些問題, 如下:

  1. var query = names.OrderBy (s =>s.Length);   
  2. query = query.Where (n =>n.Length > 3); //錯誤,無法編譯 

OrderBy輸出的序列類型是IOrderedEnumerable, 然后對于下一行的Where操作來說它的輸出類型是IEnumerable因此無法再次賦值給query,解決的辦法是在OrderBy之后顯式調用AsEnumerable():

  1. var query = names.OrderBy (s =>s.Length).AsEnumerable();   
  2. query =query.Where (n => n.Length > 3); // OK 

對于解釋性查詢, 與之對應的是調用AsQueryable()。

以上就是對Linq排序方法的簡單介紹。

【編輯推薦】

  1. 為你揭曉 Linq更新數據是否真的實用?
  2. 深度剖析linq級聯刪除
  3. 簡單實現Linq連接查詢
  4. LINQ動態查詢的實現淺析
  5. 簡單實現Linq多條件查詢
責任編輯:阡陌 來源: IT粉絲網 
相關推薦

2009-09-17 08:47:00

Linq插入數據

2009-09-17 11:32:52

LINQ調用存儲過程

2009-09-17 13:10:48

linq動態排序

2009-08-27 13:10:54

LINQ from子句

2009-12-23 09:04:41

LINQ通用分頁

2009-09-09 09:59:08

Linq調用LoadP

2009-09-14 16:41:23

LINQ To XML

2009-09-09 13:18:26

Linq Submit

2009-09-14 10:45:33

LINQ刪除數據

2009-09-15 17:15:33

Linq排序

2009-09-16 17:07:00

linq實現Left

2009-09-08 15:39:13

Linq使用Inser

2009-09-17 11:29:50

Linq擴展方法

2009-09-10 16:32:19

LINQ Where

2009-05-11 10:40:36

.NETLINQforeach

2009-09-11 10:20:36

Linq擴展方法

2009-09-15 16:26:46

Linq排序

2009-09-15 15:18:40

Linq連接查詢

2009-09-14 09:46:00

LINQ to SQL

2009-09-14 18:23:59

LINQ嵌套查詢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷色国产偷v国产偷v小说 | 中文字幕日韩欧美一区二区三区 | 日日操操| 成人久久久 | 毛片国产 | www.久久国产精品 | 香蕉视频黄色 | 日韩精品一区二区三区中文在线 | www国产精品 | 欧美国产91 | 91影库 | 欧美日韩成人 | 亚洲大片一区 | 国产欧美精品一区 | 成人在线视频观看 | 午夜精品一区二区三区免费视频 | 国产视频久久久 | 国产一区二区三区视频 | 国产成人精品综合 | 亚洲综合在线一区 | 成人在线日韩 | 久久99网 | 91久久精品一区二区二区 | 一级a性色生活片久久毛片波多野 | 欧美高清视频一区 | 日韩精品视频在线观看一区二区三区 | 免费性视频 | 性色av香蕉一区二区 | 国产有码| 免费看黄色国产 | 2022精品国偷自产免费观看 | 一区二区三区影院 | 久久久久久久久久久久久9999 | 天天躁日日躁狠狠的躁天龙影院 | av一级一片 | 久久精品国产亚洲 | 国色天香成人网 | 91精品国产日韩91久久久久久 | 久久久久国产 | 亚洲人人| 亚洲高清在线 |