【问题标题】:ASP.NET MVC - Model.OrderBy Date has no effectASP.NET MVC - Model.OrderBy Date 没有效果
【发布时间】: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


【解决方案1】:

查看您提供的答案(应将其作为编辑移入问题中),您应该应用 ThenBy,而不是新的 OrderBy:

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

【讨论】:

  • 这很酷,感谢丹的 ThenBy() 方法的提示,这样更好。
【解决方案2】:

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

【讨论】:

  • 嗨,Robban 正是您所说的,我已经编辑了我的问题。但是,我不知道这是否是正确的做法。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多