對於對象的任意集合,將以下兩個LINQ表達式總是產生相同的結果(因爲LINQ提供程序是一樣的):在數據庫/ linq查詢過濾和排序交換操作?
var result = list.OrderBy(x => x.FirstName).Where(x => x.Age > 18);
var result = list.Where(x => x.Age > 18).OrderBy(x => x.FirstName);
對於對象的任意集合,將以下兩個LINQ表達式總是產生相同的結果(因爲LINQ提供程序是一樣的):在數據庫/ linq查詢過濾和排序交換操作?
var result = list.OrderBy(x => x.FirstName).Where(x => x.Age > 18);
var result = list.Where(x => x.Age > 18).OrderBy(x => x.FirstName);
雖然Enumerable<T>.OrderBy()
被指定爲stable sort,Queryable<T>.OrderBy()
不是。
換言之,不,由於排序不能保證穩定,因此這兩個查詢不能保證給所有提供者提供相同的結果。至少,結果可能以不同的順序排列。
如果IQueryable
@ matori82實體框架還有一個複雜的問題,即底層SQL中的順序不穩定。如果運行第一個查詢,向表中插入新行並再次運行完全相同的查詢,則可能得不到相同的排序。如果新行不包含在result_中,則排序的值相等。按照其他順序排列的值可能會以另一種順序排列。目前,EF從兩個查詢中構建_same sql_,但這是EF特定的實現細節:) –
他們怎麼會不會返回相同的結果?這將是一個嚴重的錯誤,因爲他們邏輯上應該。 – Patashu
具有相同的「FirstName」值的兩個不同對象可能會以不同的順序從一個查詢返回到下一個。 –