C# Linq、OrderByDescending、First和邪恶的DefaultIfEmpty
希望这是一个简单的问题,我不理解一些基本的东西。下面是我正在处理的一个应用程序中的两个Linq语句C# Linq、OrderByDescending、First和邪恶的DefaultIfEmpty,c#,linq,linq-to-entities,defaultifempty,C#,Linq,Linq To Entities,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).Defau
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对象的集合,每个对象都有一个唯一的UID
据我所知,p1和p2应该是相同的
然而,在我的环境中,它们不是
p1是正确的(即它等于集合中UID最大的周期对象)
但是,p2不正确(即它等于集合中的其他时段)
有什么想法吗?DefaultIfEmpty()
关于Linq to Entities并不能保证维护由OrderByDescending()
建立的顺序,(另请参见)顺序应该始终是最后一个,这就是为什么第一种情况有效的原因-但在我看来,您不应该使用这两种情况-这正是FirstOrDefault()
用于:
EDMXModel.Classes.Period p1 = entities.Periods
.OrderByDescending(ap => ap.UID)
.FirstOrDefault();