首页 / 教程列表 / LINQ教程 / LINQ操作符之OrderBy

LINQ操作符之OrderBy

1681 更新于: 2021-11-16 读完约需 11 分钟

LINQ排序操作符:OrderBy和OrderByDescending

在C#&.NET的应用程序编程开发中,数据集合中的对象是以任意的顺序排列的,我们可能希望按照特定的顺序对其进行排序。在.NET的LINQ中,排序操作符允许我们按升序或降序排列集合中的元素,LINQ包括以下排序操作符。

排序操作符 描述
OrderBy 根据指定字段按升序或降序对集合中的元素进行排序。
OrderByDescending 基于指定字段按降序对集合进行排序。仅在方法语法中有效。
ThenBy 仅在方法语法中有效。用于按升序进行二级排序。
ThenByDescending 仅在方法语法中有效。用于按降序排序的第二级排序。
Reverse 仅在方法语法中有效。对集合进行反向排序。

OrderBy和OrderByDescending示例

在LINQ的查询语法中,OrderBy按升序或降序对集合的值进行排序。默认情况下,它按升序对集合进行排序,因为ascending关键字在这里是可选的。使用descending关键字对集合进行降序排序。

在LINQ的方法语法中,OrderBy则只能按升序对集合的值进行排序,而OrderByDescending则按降序排序,并且OrderByDescending只适用于方法语法中。

以下是LINQ查询语法的排序示例:

public class MyProgram
{
    static void Main(string[] args)
    {
        var orders = FakeData.Orders;

        // 1.升序(ascending)
        Console.WriteLine("**************升序**************");
        var result = from o in orders
                        orderby o.Price ascending
                        select o;
        foreach (var order in result)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        // 1.降序(descending)
        Console.WriteLine("**************降序**************");
        var resultByDescending = from o in orders
                                    orderby o.Price descending
                                    select o;
        foreach (var order in resultByDescending)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        Console.ReadKey();
    }
}

运行结果:

**************升序**************
3,Chris,1999
5,Jo,2569
2,James,2699
1,Rector,3699
4,Steven,5699
6,Rector,5699
**************降序**************
4,Steven,5699
6,Rector,5699
1,Rector,3699
2,James,2699
5,Jo,2569
3,Chris,1999

以下是LINQ方法语法的排序示例:

public class MyProgram
{
    static void Main(string[] args)
    {
        var orders = FakeData.Orders;

        // LINQ排序--方法语法
        // 1.升序(ascending)
        Console.WriteLine("**************升序**************");
        var result = orders.OrderBy(x => x.Price);
        foreach (var order in result)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        // 1.降序(descending)
        Console.WriteLine("**************降序**************");
        var resultByDescending = orders.OrderByDescending(x => x.Price);
        foreach (var order in resultByDescending)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        Console.ReadKey();
    }
}

运行结果同上。

注:OrderByDescending()方法只适用于LINQ方法语法。

多字段排序

LINQ还可对集合进行多字段排序,比如:要对订单集合的价格和ID进行不同顺序的排序。

以下是查询语法的示例代码:

public class MyProgram
{
    static void Main(string[] args)
    {
        var orders = FakeData.Orders;

        // LINQ排序--查询语法

        // 1.先按来源升序,再按价格升序
        Console.WriteLine("**************先按来源升序,再按价格升序**************");
        var result1 = from o in orders
                        orderby o.Source, o.Price
                        select o;
        foreach (var order in result1)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        // 2.先按来源升序,再按价格降序
        Console.WriteLine("**************先按来源升序,再按价格降序**************");
        var result2 = from o in orders
                        orderby o.Source, o.Price descending
                        select o;
        foreach (var order in result2)
        {
            Console.WriteLine($"{order.Id},{order.Customer},{order.Price}");
        }

        Console.ReadKey();
    }
}

运行结果如下:

**************先按来源升序,再按价格升序**************
2,James,2699
1,Rector,3699
4,Steven,5699
6,Rector,5699
3,Chris,1999
5,Jo,2569
**************先按来源升序,再按价格降序**************
4,Steven,5699
6,Rector,5699
1,Rector,3699
2,James,2699
5,Jo,2569
3,Chris,1999

LINQ查询语法的多字段排序是在orderby操作符后以逗号分隔的多个字段,同时可指定排序方向。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » LINQ教程 » LINQ操作符之OrderBy 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册