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,这是这种情况的问题.
这段代码看起来不错.您应该检查Date字段中的实际内容,并确保您不要在数据库级别上仅设置DateTime对象的Date,这将导致特定日期的所有DateTime对象指向00:00:00因此LINQ不会知道如何对它们进行排序.
看看你提供的答案(哪个FYI应该作为编辑转移到问题中),你应该应用一个ThenBy,而不是一个新的OrderBy:
var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList();
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           25513 次  |  
        
|   最近记录:  |