当与orderby一起使用时,升序关键字是否纯粹为了清晰而存在?

Geo*_*ett 8 c# linq sql-order-by keyword

如果我做一个查询,订购如下的元素,我得到升序.

var i = from a in new int[] { 1, 2, 3, 4, 5 }
        orderby a
        select a;
Run Code Online (Sandbox Code Playgroud)

如果我添加ascending关键字我得到相同的结果.

var i = from a in new int[] { 1, 2, 3, 4, 5 }
        orderby a ascending
        select a;
Run Code Online (Sandbox Code Playgroud)

我认识到ascending在第二个示例中添加关键字可以提高可读性,因为它不需要知道默认顺序orderby.

ascending关键字是否还有其他原因存在?

我也有兴趣知道为什么这个(突破性变化?)只是用于一个特定情况.

编辑:请参阅下面的评论,@ Joe指出,这不是一个重大变化,因为它是一个上下文关键字.

Mar*_*ell 7

是的,这是多余的.由于订单是隐式提升的,因此没有任何情况可以做任何不同的事情.

我想它提供了完整性,但将一个关键词引入到那种......无能为力的语言中似乎确实是一种耻辱.

但另一方面,:

  • 它模仿SQL,它在语义方面广泛相关
  • 它避免了"我该怎么办?" 问题
  • 它没有任何伤害,没有人强迫你使用它
  • 它(可以说)如果你有a descending, b ascending, c descending, d ascending等等就会让事情变得更清楚

示例(请参阅注释)order by a, order by b实际上与以下内容非常不同order by a, b:

public static void Main()
{
    var data = new[] { new { X = 1, Y = 1 }, new { X = 1, Y = 2 },
                       new { X = 2, Y = 1 }, new { X = 2, Y = 2 } };

    foreach (var pair in from p in data orderby p.X, p.Y select p)
    {
        Console.WriteLine("{0},{1}", pair.X, pair.Y);
    }
    Console.WriteLine();
    foreach (var pair in from p in data orderby p.X orderby p.Y select p)
    {
        Console.WriteLine("{0},{1}", pair.X, pair.Y);
    }
}
Run Code Online (Sandbox Code Playgroud)

打印:

1,1
1,2
2,1
2,2

1,1
2,1
1,2
2,2
Run Code Online (Sandbox Code Playgroud)

注意中间的两个是相反的.这是因为:

data.OrderBy(p => p.X).ThenBy(p => p.Y)
Run Code Online (Sandbox Code Playgroud)

在第一个循环中,和

data.OrderBy(p => p.X).OrderBy(p => p.Y)
Run Code Online (Sandbox Code Playgroud)

在第二.

由于LINQ试图保证一个稳定的排序(即当有匹配的数据保留在原来的顺序),一个OrderBy().OrderBy()做的第一排序(在X),然后度假村中的数据,仅着眼于原始(按X排序)当Ys匹配时的顺序.换句话说:它从左到右翻转它们.