次のように定義されたモデルがあるとしましょう: Foo {Id, Date}
。
最新の日付でFooを取得できるようにブールラムダ式を作成する方法はありますか? の線に沿って何か(f => f.Date IsLatest)
?
次のように定義されたモデルがあるとしましょう: Foo {Id, Date}
。
最新の日付でFooを取得できるようにブールラムダ式を作成する方法はありますか? の線に沿って何か(f => f.Date IsLatest)
?
var latest = model.OrderByDescending(m => m.Date).FirstOrDefault();
日付が最新かどうかを判断する式を作成するには、最新の日付を知る必要があります。つまり、次のようになります。
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);
エンティティの名前に関する情報を提供していない場合(foos
ここでは想定しています)。このようなもの:
var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault();
そして、最大の日付を持つものが複数ある場合(「最新のフー」と言ったのは知っていますが、ここでのあなたの時間の解像度はわかりません)、実際にはグッファのようなものを追いかけます答え。
どちらのソリューションも、日付列のインデックスから大きなメリットが得られることに注意してください。インデックスがなく、テーブルが大きくなった場合はどうなりますか?その後、それは非常に遅くなる可能性があります。
これを試して:
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);