【发布时间】:2010-11-28 19:39:17
【问题描述】:
我在按日期对结果进行排序时遇到了一些困难。有什么特别的方法吗? 因为我现在正在这样做:
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 排序,然后按日期排序:
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,这是一个问题这种情况。
【问题讨论】:
-
抱歉——我没有遇到排序日期的问题,假设 Date 是一个日期时间字段。也许您可以更具体地了解您的数据库类型/版本?
-
尝试移动 OrderBy。做:return View(articles.ToList().OrderBy(a => a.Date));您正在做的事情看起来不错,但这将使数据库脱离等式,只需使用 Linq to Objects 排序。如果这有效,则排序不会发生在 linq 查询中。
标签: asp.net-mvc linq model sorting sql-order-by