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指出,这不是一个重大变化,因为它是一个上下文关键字.
是的,这是多余的.由于订单是隐式提升的,因此没有任何情况可以做任何不同的事情.
我想它提供了完整性,但将一个关键词引入到那种......无能为力的语言中似乎确实是一种耻辱.
但另一方面,:
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匹配时的顺序.换句话说:它从左到右翻转它们.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |