ASP.NET MVC - Model.OrderBy Date无效

zan*_*ona 6 linq sorting asp.net-mvc model sql-order-by

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

var db = new DB();
var articles = db.Articles;
var orderedArticles = articles.OrderBy(a => a.Date);
return View(orderedArticles.ToList());
Run Code Online (Sandbox Code Playgroud)

其中Date是日期时间字段.对OrderBy(..)OrderByDescending(..)没有影响

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

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

var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList();
Run Code Online (Sandbox Code Playgroud)

我会

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
Run Code Online (Sandbox Code Playgroud)

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

var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList();
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ban 6

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


Dan*_*son 6

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

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();
Run Code Online (Sandbox Code Playgroud)