在哪種情況下,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。可能有很多原因,他們爲什麼不按照他們通常的順序,並且你已經意識到你沒有權力*期望*他們按照特定的順序... –