比方说,我有一个模型定义为:Foo {Id, Date}
。最近日期的Lambda表达式
有没有办法让一个布尔lambda表达式,以便我可以得到最新的日期Foo?东西沿线(f => f.Date IsLatest)
?
比方说,我有一个模型定义为:Foo {Id, Date}
。最近日期的Lambda表达式
有没有办法让一个布尔lambda表达式,以便我可以得到最新的日期Foo?东西沿线(f => f.Date IsLatest)
?
var latest = model.OrderByDescending(m => m.Date).FirstOrDefault();
试试这个:
DateTime maxDate = FooCollection.Max(f=>f.Date)
“获取最新日期的Foo”,而不是“获取最新日期” – AakashM 2012-04-11 10:59:05
既然你没有提供有关实体的名称(我假设foos
这里)的任何信息;是这样的:
var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault();
如果有不止一个与最大日期(我知道你说的“用最新的富......”,但我不知道你的时间分辨率这里)比你实际上更像Guffa的回答之后。
请注意任一解决方案都将从日期列的索引中大量获益。如果没有索引,表格变大?那可能会很慢。
我正在考虑类似foos.Where( f => f.Date IsLatest)。我实际上是在规范模式中尝试我的手,我需要它是一个布尔表达式。 – evablack 2012-04-12 00:12:47
是的,但那不是c#所以它不会编译,我相信你也知道这一点。我不相信用这种方式包装EF也有任何真正的好处。当然在你的ObjectContext类的'GetLatestFoo'上做一个类似上述的简单方法会是最简单的事情吗? – 2012-04-12 07:39:27
要作出这样的决定,如果日期是最新的一种表达,你需要了解最新的日期,即:
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);
我想你可能是指'Foo.Where(f => f.Date == latestDate);':) – 2012-04-11 10:59:58
@AndrasZoltan:是的,你说得对。感谢您的支持。 – Guffa 2012-04-11 11:06:08
您可以尝试下列代码:
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);
结果不会是'DateTime'。 – Guffa 2012-04-11 11:07:57
@Guffa确实,纠正 – ionden 2012-04-11 11:11:16
另请参见Jon Skeet的[morelinq](http://code.google.com/p/morelinq/)库中的MaxBy() – 2012-04-11 12:15:33