天天看点

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子句