希望这是一个简单的问题,我不理解基本的东西。以下是我正在处理的应用程序中的两个Linq语句。
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是一个包含两个Period对象的集合,每个对象都有unique UID
。
根据我理解的一切,p1和p2应该是相同的。
然而,在我的环境中,他们不是。
p1是正确的(即它等于集合中具有最大UID的Period对象)。
然而,p2不正确(即它等于集合中的其他句点)。
有什么想法吗?
答案 0 :(得分:8)
DefaultIfEmpty()
不保证维持OrderByDescending()
建立的顺序,(也见here)订单应该始终是最后一次,这就是为什么第一个案例有效 - 但在我看来你不应该使用 - 这正是FirstOrDefault()
的用途:
EDMXModel.Classes.Period p1 = entities.Periods
.OrderByDescending(ap => ap.UID)
.FirstOrDefault();