2009-09-16 16 views
5

Sonuçlarıma Tarihe göre sıralama yapmakta zorluk yaşıyorum. Özel bir yöntem var mı? Şu anda bunu yapıyorum çünkü:ASP.NET MVC - Model.OrderBy Tarihin bir etkisi yok

Tarihi bir datetime alan olduğunu
var db = new DB(); 
var articles = db.Articles; 
var orderedArticles = articles.OrderBy(a => a.Date); 
return View(orderedArticles.ToList()); 

. Ve

Yani ne olup bittiğini kontrol etmek yönetilen OrderBy (..) veya OrderByDescending (..) için herhangi bir etkisi yoktur. ile:

var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList(); 

ben

olurdu ben örneğin aynı gün için her iki makaleler varsa o kadar

Everytime ben sadece zamanında tarihini kullanıyorum yeni madde eklemek

Id   Title       Date 
10   First Added Article   16/09/2009 00:00 
11   Second Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

Yani, tarihe göre filtrelemenin görülebildiğini görebilirsiniz, ancak aynı tarihe sahip olduğumdaki sıralama, odaklamanın odağı kaybediyor olmasıdır. Ben is yaptığını Peki, Tarih bazında Id ve sonraki emriyle ilk sipariş gibi orderBy iki farklı bağlamlarda: Aşağıdaki

var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList(); 

Yani bundan sonra ben vardır:

Id   Title       Date 
11   Second Added Article   16/09/2009 00:00 
10   First Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

Gerçekten bilmiyorum Eğer bunu yapmanın doğru yolu buysa, asıl sorun şu ki, 16/09/2009 gibi bir tarih alanını gönderdiğinizde, saati 00:00 olarak ayarlar ve bu durum bu durumla ilgili bir problemdir.

+0

Üzgünüz - Ben olmadı Tarih, tarihin bir tarih alanı olduğu varsayılarak, tarihleri ​​ayırma ile ilgili sorunlar. Belki veritabanı tipiniz/versiyonunuz hakkında daha spesifik olabilirsiniz? –

+0

, OrderBy'yi taşımayı deneyin. Do: return Görüntüle (articles.ToList(). OrderBy (a => a.Date)); Ne yapıyorsun doğru görünüyor, ama bu veritabanını denklemden çıkaracak ve sadece Linq'den Objects sorting'e kullanacaksın. Bu çalışırsa, linq sorgusunda sıralama gerçekleşmiyor. – anonymous

cevap

6

Bu kod güzel görünüyor. Date alanında gerçekten neyin olduğunu kontrol etmeli ve sadece DateTime nesnesinin tarihini veritabanı seviyesinde ayarlamamış olmalısınız. Bu, belirli bir tarihin tüm DateTime nesnelerini 00:00:00 'ya işaret edecektir. Böylece LINQ onları nasıl sıralayacağını bilemezdi. Eğer (Bilginize bir düzenleme olarak gündeme taşınacak olmalıdır) sağlanan cevap, yerine yeni bir OrderBy yerine, ThenBy başvurmalıdır baktığımızda

+0

Merhaba Robban tam olarak söylediğin şey, sorumu düzenledim. Ama eşik, bunu yapmanın doğru yolu olup olmadığını bilmiyorum. Yardımınız için teşekkürler. – zanona

6

:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList(); 
+0

Bu harika, ThenBy() yöntemi Dan ile bahşiş için teşekkürler, bunun gibi daha iyi. – zanona