6

希望这是我不了解基本知识的简单问题。下面是我正在处理的应用程序中的两个 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();

entity.Periods 是一个包含两个 Period 对象的集合,每个对象都有一个unique UID.

根据我的理解,p1 和 p2 应该是一样的。

然而,在我的环境中,它们不是。

p1 是正确的(即它等于集合中 UID 最大的 Period 对象)。

然而,p2 是不正确的(即它等于集合中的另一个 Period)。

有任何想法吗?

4

1 回答 1

8

DefaultIfEmpty()在 Linq to Entities 上,不保证维持由建立的顺序OrderByDescending(),(另请参见此处)顺序应该始终是最后一个,这就是第一种情况有效的原因——但我认为你不应该使用任何一种——这FirstOrDefault()正是为了:

EDMXModel.Classes.Period p1 = entities.Periods
                                      .OrderByDescending(ap => ap.UID)
                                      .FirstOrDefault();
于 2011-09-30T19:42:20.460 回答