繁体   English   中英

Linq,OrderByDescending,First,以及邪恶的DefaultIfEmpty

[英]Linq, OrderByDescending, First, and the nefarious DefaultIfEmpty

希望这是一个简单的问题,我不理解基本的东西。 以下是我正在处理的应用程序中的两个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不正确(即它等于集合中的其他Period)。

有任何想法吗?

Linq to Entities上的DefaultIfEmpty()不保证维持OrderByDescending()建立的顺序,(也见这里 )顺序应该始终是最后的,这就是第一种情况有效的原因 - 但是你不应该使用我认为- 这正是FirstOrDefault()的用途:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM