我使用LINQ查询通过降序日期获取数据顺序.但是当年份改变时,日期的降序顺序不正确
这是我的代码
在此代码中,LastLogin是具有DateTime数据类型的列.我必须按此列名对数据进行排序.
var res = objUI.Where(x => x.LastLogin != null)
.GroupBy(x => x.LastLogin.Value.Date)
.Select(x => new { LastLogin = string.Format("{0:MM/dd/yyyy}", x.Key) })
.OrderByDescending(x => x.LastLogin)
.ToList();
Run Code Online (Sandbox Code Playgroud)
你不应该尝试将日期命名为字符串;
var res = objUI.Where(x => x.LastLogin != null)
.GroupBy(x => x.LastLogin.Value.Date)
.OrderByDescending(x => x.Key)
.Select(x => new { LastLogin = string.Format("{0:MM/dd/yyyy}", x.Key) })
.ToList();
Run Code Online (Sandbox Code Playgroud)
您的字符串表示以月份开头.
看起来你实际上只对不同的日期感兴趣 - 分组然后丢弃除密钥以外的所有内容相当于只是投影然后获取不同的数据.我还建议避免匿名类型,除非你真的需要它 - 一个只有一个属性的匿名类型通常是个坏主意.
最后,如果您要格式化单个值 - 当然是一个DateTime
值 - 只需调用该ToString
方法就更简单了.在下面的代码中我也明确指定了不变文化 - 否则您可能会发现使用了意外的日历系统......
所以我写道:
var res = objUI.Where(x => x.LastLogin != null)
.Select(x => x.LastLogin)
.Distinct()
.OrderByDescending(x => x)
.Select(x => x.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture))
.ToList();
Run Code Online (Sandbox Code Playgroud)