在哪种情况下,linq-to-sql查询中没有显式排序返回项目没有按主键排序?什么时候sql查询的隐式顺序不是主键
(我知道,SQL语句不具有隐含的顺序,并得到一个定义的顺序正确的做法是明确设置)
如: 给定一个SQL数据库的表parent
,和表children
:
表父具有字段:
- ID(INT,主键,自动值,聚集的索引)
- 名称(VARCHAR)
表儿童具有字段:
- ID(INT,主键,自动值,聚集的索引)
- 的parentID(INT ,非聚簇索引的外键)
- 名称(varchar)
与LINQ到SQL通过以下方式获得:据我所知,LINQ到SQL只是在后台执行一个select xy from Children Where parentID=123
var parent = dc.Parent.First(p=>p.ID==123);
...
foreach (var child in parent.Children)
Console.WriteLine(child.ID)
,但我不知道是否有一些额外的缓存之间
在哪些情况下child.IDs不会按升序排序?
如果我要保证顺序,要做到这一点是正确的做法是明显
foreach (var child in parent.Children.OrderBy(c=>c.ID);
我意识到,如果没有一个明确的排序依据的顺序是正式定义,并且可以不依赖于任何隐含的排序。
但是我有一些代码直到现在还没有使用明确的顺序,直到最近通过了所有的测试,但现在偶尔会失败,我只是对原因感到好奇。
“我知道SQL语句没有隐式顺序,并且获得已定义顺序的正确方法是明确设置它” - 那么为什么要问一个试图建立隐式顺序的问题? “......我只是对原因感到好奇。” - 您已经确定了原因 - 您在需要时未能指定订单。 –
我以为我的意图非常清楚:我已经建立了正确的修复,但我仍然对sql-server和linq-to-sql的内部工作感到好奇。 – HugoRune
每天,在您上班的路上,您都停在一组红绿灯处,以另一种方式来等待,是一辆红色的汽车,一辆黄色的汽车和一辆货车。今天早上,他们是黄色的汽车,红色的汽车和一辆绿色的SUV。可能有很多原因,他们为什么不按照他们通常的顺序,并且你已经意识到你没有权力*期望*他们按照特定的顺序... –