2011-09-30 99 views
6

希望這是一個簡單的問題,我不理解基本的東西。下面是我正在處理的一個應用程序中的兩個Linq語句。Linq,OrderByDescending,首先,和邪惡的DefaultIfEmpty

EDMXModel.Classes.Period p1 = entities.Periods.DefaultIfEmpty(null).OrderByDescending(ap => ap.UID).First(); 

EDMXModel.Classes.Period p2 = entities.Periods.OrderByDescending(ap => ap.UID).DefaultIfEmpty(null).First(); 

entities.Periods是含有兩個時期的對象,每一個unique UID一組。

根據我的理解,p1和p2應該是相同的。

但是在我的環境中,他們不是。

p1是正確的(即它等於集合中UID最大的Period對象)。

然而,p2是不正確的(即它等於集合中的另一個週期)。

任何想法?

LINQ的

回答

8

DefaultIfEmpty()到實體並不保證維持由OrderByDescending()確定的順序進行,(見here)順序應該始終是最後一個,這就是爲什麼第一種情況下工作 - 但你不應該在我看來,無論是使用 - 這正是FirstOrDefault()用於:

EDMXModel.Classes.Period p1 = entities.Periods 
             .OrderByDescending(ap => ap.UID) 
             .FirstOrDefault();