Получить раннюю дату в выражении LINQ
У меня есть следующий LINQ в контроллере WebAPI:
MyDate = i.Products.FirstOrDefault().Date
Работает так, как ожидалось. Но продукты - это коллекция, поэтому может быть много дат. Вышеуказанное просто выбирает первый.
То, что я действительно хочу сделать, - это найти дату с самым ранним временем и выбрать ее.
Как бы это выглядело?
Ответы
Ответ 1
Если вам нужна только дата, а не весь продукт, немного проще использовать Max
или Min
.
MyDate = i.Products.Select(x => x.Date).Max()
Если вы действительно хотите продукт, вам нужно отсортировать его по дате и затем выбрать первый.
MyProduct = i.Products.OrderBy(x => x.Date).FirstOrDefault()
Ответ 2
Этот способ более краткий:
var earlyDate = i.Products.Min(p=>p.Date);
Но вы уверены, что Product != null
Ответ 3
Вы можете использовать
i.Products.OrderByDescending(x => x.Date).FirstOrDefault().Date;
Ответ 4
Вот выражение лямбда, которое даст вам минимальную (самую раннюю) дату
DateTime earliestDate = i.Products.Min(p => p.Date);
Ответ 5
Просто закажите по дате:
MyDate = i.Products.OrderBy(x => x.Date).Select(x => x.Date).FirstOrDefault();
Ответ 6
Оптимизированный способ:
i.Products.OrderByDescending(x => x.Date).Select(x => x.Date).FirstOrDefault();
Ответ 7
i.Products.OrderBy(x => x.Date).FirstOrDefault().Date;
Он должен быть упорядоченным, а не orderbydescending. orderbydescending даст вам самую свежую дату сначала, и заказ сначала даст вам самую раннюю дату.
Ответ 8
Простой, если вам нужно самое раннее использование OrderBy
и нужно самому старому, используйте OrderByDescending
.
i.Products.OrderBy(x => x.Date).Select(x => x.Date).FirstOrDefault();
i.Products.OrderByDescending(x => x.Date).Select(x => x.Date).FirstOrDefault();