【发布时间】:2012-04-11 10:53:48
【问题描述】:
假设我有一个模型定义为:Foo {Id, Date}。
有没有办法制作一个布尔 lambda 表达式,以便我可以获得最新日期的 Foo?类似于(f => f.Date IsLatest)?
【问题讨论】:
标签: c# linq entity-framework lambda
假设我有一个模型定义为:Foo {Id, Date}。
有没有办法制作一个布尔 lambda 表达式,以便我可以获得最新日期的 Foo?类似于(f => f.Date IsLatest)?
【问题讨论】:
标签: c# linq entity-framework lambda
var latest = model.OrderByDescending(m => m.Date).FirstOrDefault();
【讨论】:
DateTime。
要做出判断日期是否为最新的表达式,您需要知道最新日期,即:
DateTime latestDate = items.Max(f => f.Date);
var latestItems = items.Where(f => f.Date == latestDate);
另一种方法是对项目进行排序:
var latestItem = items.OrderBy(f => f.Date).First();
或者使用聚合:
var latestItem = items.Aggregate((d, v) => v.Date > d.Date ? v : d);
【讨论】:
Foo.Where(f => f.Date == latestDate); :)
鉴于您尚未提供有关实体名称的任何信息(我假设此处为 foos);像这样:
var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault();
如果有 多个 的最大日期(我知道你说'最新的 Foo ......'但我不知道你在这里的时间分辨率)比您实际上会追求更像 Guffa 的答案。
请注意,任一解决方案都将从日期列上的索引中受益匪浅。如果没有索引并且表变大了?那么它可能会很慢。
【讨论】:
试试这个:
DateTime maxDate = FooCollection.Max(f=>f.Date)
【讨论】:
你可以试试下面的代码:
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);
【讨论】: