最新日期的Lambda表达式

时间:2012-04-11 10:53:48

标签: c# linq entity-framework lambda

假设我将模型定义为:Foo {Id, Date}

有没有办法制作一个布尔值的lambda表达式,这样我才能得到最新日期的Foo?类似于(f => f.Date IsLatest)

的内容

5 个答案:

答案 0 :(得分:20)

var latest = model.OrderByDescending(m => m.Date).FirstOrDefault();

答案 1 :(得分:3)

鉴于您没有提供有关实体名称的任何信息(我假设foos在这里);像这样的东西:

var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault();

如果有多个的最大日期(我知道你说的是'最新的Foo ......'但我不知道你的时间的分辨率)你真的会更喜欢Guffa的答案。

请注意,任何一种解决方案都会从日期列的索引中大量受益。如果没有索引并且表变大了?然后它可能会很慢。

答案 2 :(得分:2)

要制作一个确定日期是否为最新日期的表达式,您需要知道最新日期,即:

DateTime latestDate = items.Max(f => f.Date);

var latestItems = items.Where(f => f.Date == latestDate);

另一种方法是对项目进行排序:

var latestItem = items.OrderBy(f => f.Date).First();

或使用Aggregate:

var latestItem = items.Aggregate((d, v) => v.Date > d.Date ? v : d);

答案 3 :(得分:0)

试试这个:

DateTime maxDate = FooCollection.Max(f=>f.Date)

答案 4 :(得分:0)

您可以尝试以下代码:

List<Foo> fooList = new List<Foo>();

// add the Foo instance in list here
// then apply following to take latest

fooList.OrderByDescending(p => p.Date).Take(1);