Получить раннюю дату в выражении 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();