ASP.NET MVC - Model.OrderBy Date无效

时间:2009-09-16 13:49:06

标签: asp.net-mvc linq model sorting sql-order-by

按日期排序结果我遇到了一些困难。有什么特别的方法吗? 因为我现在正在这样做:

var db = new DB();
var articles = db.Articles;
var orderedArticles = articles.OrderBy(a => a.Date);
return View(orderedArticles.ToList());

其中Date是日期时间字段。 对 OrderBy(..) OrderByDescending(..)

没有任何影响

所以我设法检查发生了什么。

每次我添加一篇新文章我只是使用日期而不是时间 如果我在同一天有两篇文章,例如: 用:

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

我会

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

所以你可以看到按日期过滤,但事情就是当我有相同的日期时,排序会失去焦点。 所以我所做的是,orderBy两个不同的上下文,如Id的第一个顺序和后来的Date顺序:

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

所以在此之后我有以下内容:

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

我真的不知道这是否是正确的方法,因为主要的问题是当你提交像16/09/2009这样的日期字段时它将时间设置为00:00,这是一个问题这种情况。

2 个答案:

答案 0 :(得分:6)

此代码看起来不错。您应该检查Date字段中的实际内容,并确保您不要在数据库级别上仅设置DateTime对象的Date,这将导致特定日期的所有DateTime对象指向00:00:00因此LINQ不知道如何对它们进行排序。

答案 1 :(得分:6)

看看你提供的答案(应该将哪个FYI作为编辑转移到问题中),你应该应用一个ThenBy,而不是一个新的OrderBy:

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