天天看點

LINQ基礎—OrderBy子句

LINQ基礎—OrderBy子句

一、簡介

适用場景:對查詢出的語句進行排序,比如按時間排序等等。

說明:按指定表達式對集合排序;預設是升序,加上descending表示降序,對應的擴充方法是OrderBy和OrderByDescending。

1.對查詢出來的結果集進行升序或降序排列。

2.可以指定多個鍵,以便執行一個或多個次要排序操作。

3.預設排序順序為升序。

4.編譯時,orderby子句将被轉換為對OrderBy方法的調用。orderby子句中的多個鍵轉換為ThenBy方法調用。

本例是一個升序的排序。

public static bool IsEven(int a)
{
    return a % 2 == 0 ? true : false;
}      
var query = from a in arr
             where IsEven(a)
             orderby a
             select a;      

如下面例子是一個降序的排序。

var query = from a in arr
 where IsEven(a)
 orderby a descending
 select a;      

二、案例

簡單形式

使用 orderby 按雇用日期對雇員進行排序:

var q =
    from e in db.Employees
    orderby e.HireDate
    select e;      

說明:預設為升序排序

帶條件形式

Where和Order By的順序并不重要。而在T-SQL中,Where和Order By有嚴格的位置限制。

var q =
    from o in db.Orders
    where o.ShipCity == "London"
    orderby o.Freight
    select o;      

說明:使用where和orderby按運費進行排序。

降序

var q = 
    from p in db.Products
    orderby p.UnitPrice descending
    select p;      

說明:對商品的單價進行降序排序

ThenBy

使用複合的 orderby 對客戶按照City和ContactName進行排序,進行排序:

var q =
    from c in db.Customers
    orderby c.City, c.ContactName
    select c;      

說明:按多個表達式進行排序,例如先按City排序,當City相同時,按ContactName排序。這一句用Lambda表達式像這樣寫:

var q = 
    db.Customers
    .OrderBy(c => c.City)
    .ThenBy(c => c.ContactName).ToList();      

在T-SQL中沒有ThenBy語句,其依然翻譯為OrderBy,是以也可以用下面語句來表達:

var q = 
    db.Customers
    .OrderBy(c => c.ContactName)
    .OrderBy(c => c.City).ToList();      

所要注意的是,多個OrderBy操作時,級連方式是按逆序。 對于降序的,用相應的降序操作符替換即可。

var q = 
    db.Customers
    .OrderByDescending(c => c.City)
    .ThenByDescending(c => c.ContactName).ToList();      

ThenByDescending

第一個ThenBy/ThenByDescending擴充方法作為第二位排序依據,這兩個擴充方式都是用在OrderBy/OrderByDescending之後的,第二個ThenBy/ThenByDescending則作為第三位排序依據,以此類推。

var q = 
    db.Customers
    .OrderByDescending(c => c.City)
    .ThenByDescending(c => c.ContactName).ToList();      

本文來自部落格園,作者:農碼一生,轉載請注明原文連結:https://www.cnblogs.com/wml-it/p/14836978.html

技術的發展日新月異,随着時間推移,無法保證本部落格所有内容的正确性。如有誤導,請大家見諒,歡迎評論區指正! 個人開源代碼連結: GitHub:

https://github.com/ITMingliang

Gitee:

https://gitee.com/mingliang_it

GitLab:

https://gitlab.com/ITMingliang

進開發學習交流群:
LINQ基礎—OrderBy子句

繼續閱讀