按日期排序结果我遇到了一些困难。有什么特别的方法吗? 因为我现在正在这样做:
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,这是一个问题这种情况。
答案 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();