2009-05-26 30 views
2

可以說,我有一個日期時間字段和INT字段的表並執行這樣的查詢:LinqToSql中的子查詢是否保證與它們​​的父對象的順序相同?

var query = context.tblSomeTable.Where(s=>s.Name == "Hello World").OrderBy(s=>s.SignUpDate); 

,如果我再與結果執行兩個子查詢,是他們仍然按照日期?:

有序
var sub1 = query.Where(s=>s.Id = 5); 
var sub2 = query.Where(s=>s.Id = 8); 

我的直覺說,他們仍然在秩序,但如果原來的查詢已被迭代/執行尚未重要嗎?

回答

7

是的,但是,說他們「仍然」訂購是錯誤的。他們被定購一次,最後。

關於LinqtoSql需要注意的重要一點是,它只是建立一個查詢,當它使用使用時執行。在你顯示的例子中,你還沒有真正使用過查詢。你剛剛建立的兩大疑問

他們都將生成這個SQL語句:

select * from tblSomeTable s 
where s.Name = 'Hello World' and s.ID == @p1 
order by s.SignUpDate 

當您使用SUB1,@ P1將被設定爲5

(實際上的 'Hello World'將作爲參數傳遞以及...)

+0

這很容易通過使用SQL Server Profiler進行測試。在創建LINQ查詢的代碼中放置一個斷點,然後在觀察分析器的同時遍歷每行。您將確切知道查詢何時到達數據庫。這對於調試查詢也很好,因爲你可以看到它們並從探查器中抓取它們。 – Jagd 2009-05-26 18:27:57

1

是的,它仍然保持相同的順序。在你的情況下,第一個查詢將是一個IOrderedQueryable,當你進一步查詢時,sub1和sub2也將是IOrderedQueryable的,因此將保持排序。

相關問題