#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).DefaultIfEmpty(null).First();
сущности.Periods — это набор, содержащий два объекта Period, каждый с a unique UID
.
Согласно всему, что я понимаю, p1 и p2 должны быть одинаковыми.
Однако в моей среде это не так.
значение p1 правильное (т. е. Оно равно объекту Period с наибольшим UID в наборе).
однако значение p2 неверно (т. Е. Равно другому периоду в наборе).
Есть идеи?
Ответ №1:
DefaultIfEmpty()
в Linq для сущностей не гарантируется поддержание порядка, установленного OrderByDescending()
, (также см. here) порядок всегда должен быть последним, и именно поэтому первый случай работает — но, на мой взгляд, вы не должны использовать ни то, ни другое — это именно то, что FirstOrDefault()
для:
EDMXModel.Classes.Period p1 = entities.Periods
.OrderByDescending(ap => ap.UID)
.FirstOrDefault();