Diyelim ki şöyle bir modelim var: Foo {Id, Date}
.Lambda İfadesi
Foo'yu en son tarihe kadar alabilmem için bir boolean lambda ifadesi oluşturmanın bir yolu var mı? (f => f.Date IsLatest)
hatları boyunca bir şey?
Diyelim ki şöyle bir modelim var: Foo {Id, Date}
.Lambda İfadesi
Foo'yu en son tarihe kadar alabilmem için bir boolean lambda ifadesi oluşturmanın bir yolu var mı? (f => f.Date IsLatest)
hatları boyunca bir şey?
var latest = model.OrderByDescending(m => m.Date).FirstOrDefault();
bu deneyin: (Burada foos
varsayarak) senin kişilerin isim hakkında herhangi bir bilgi verilmemektedir ettik
DateTime maxDate = FooCollection.Max(f=>f.Date)
"Foo'yu en son tarihle al", "en son tarih olsun" – AakashM
Verilen; Böyle bir şey:
var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault();
Ve varsa max tarihine (ı '... en son Foo' dedin biliyorum ama senin kez çözünürlüğünü bilmiyorsanız sahip birden fazla burada) aslında Guffa'nın cevabı gibi bir şeyden sonra olacaksın.
Her iki çözümün de tarih sütunundaki bir dizinden büyük ölçüde faydalanacağını unutmayın. İndeks yoksa ve tablo büyürse? O zaman çok yavaş olabilirdi.
Düşündüğüm gibi bir şeylerin çizgileri üzerinde düşünürdüm. f => f.Date IsLatest). Aslında Şartname Deseni'nde elimi deniyordum ve bunun bir boole ifadesi olmasına ihtiyacım var. – evablack
Evet, ama bu bile C# değil, bu yüzden derlemeyecek, siz de biliyorsunuzdur. EF'i bu şekilde sarmada bulunacak herhangi bir gerçek * fayda * olduğuna ikna olmadım. Kesinlikle ObjectContext sınıfında 'GetLatestFoo' üzerinde bir kısayol yöntemi, yukarıdaki gibi bir şey yapar en basit şey olurdu? –
tarih son olup olmadığını belirleyen bir ifade yapmak için, en son tarih bilmek yani gerekir:
DateTime latestDate = items.Max(f => f.Date);
var latestItems = items.Where(f => f.Date == latestDate);
başka bir yaklaşım öğeleri sıralamak için olacaktır:
var latestItem = items.OrderBy(f => f.Date).First();
veya Agrega kullanın:
var latestItem = items.Aggregate((d, v) => v.Date > d.Date ? v : d);
Sanırım Foo.Where (f => f.Date == latestDate); ':) –
@AndrasZoltan: Evet, haklısınız demektir. Bunu yakaladığın için teşekkürler. – Guffa
aşağıdaki kodu deneyebilirsiniz:
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);
Sonuç bir "DateTime" olmaz. – Guffa
@Guffa, düzeltildi, – ionden
Ayrıca bkz. MaxBy() Jon Skeet [morelinq] (http://code.google.com/p/morelinq/) kütüphanesinde –