在LINQ表达式中获取最早的日期

时间:2016-03-31 06:25:08

标签: c# asp.net linq

我在WebAPI控制器中有以下LINQ:

MyDate = i.Products.FirstOrDefault().Date

它按预期工作。但是,Products是一个集合,所以可以有很多日期。以上只选择第一个。

我真正想做的是找到最早的日期,并选择那个日期。

看起来怎么样?

8 个答案:

答案 0 :(得分:16)

如果您只想要日期而不是整个产品,那么使用MaxMin会更清楚。

MyDate = i.Products.Select(x => x.Date).Max()

如果您确实需要该产品,则需要按日期排序,然后选择第一个。

MyProduct = i.Products.OrderBy(x => x.Date).FirstOrDefault()

答案 1 :(得分:4)

这种方式更简洁:

var earlyDate = i.Products.Min(p=>p.Date);

但你确定Product != null

答案 2 :(得分:2)

您可以使用

 i.Products.OrderByDescending(x => x.Date).FirstOrDefault().Date;

答案 3 :(得分:2)

这是一个lambda表达式,它将为您提供最小(最早)的日期

DateTime earliestDate = i.Products.Min(p => p.Date);

答案 4 :(得分:1)

按日期排序:

position:fixed

答案 5 :(得分:1)

优化方式是:

i.Products.OrderByDescending(x => x.Date).Select(x => x.Date).FirstOrDefault();

答案 6 :(得分:1)

i.Products.OrderBy(x => x.Date).FirstOrDefault().Date;

必须是orderby而不是orderbydescending。 orderbydescending将首先为您提供最新日期,而order by将首先为您提供最早的日期。

答案 7 :(得分:1)

很简单,如果您需要最早使用OrderBy并且需要最旧版本,请使用OrderByDescending

 i.Products.OrderBy(x => x.Date).Select(x => x.Date).FirstOrDefault();
 i.Products.OrderByDescending(x => x.Date).Select(x => x.Date).FirstOrDefault();