使用linq按月和年份排序

时间:2016-01-12 08:21:24

标签: linq date sql-order-by

我从数据库中获取不同的月份,但月份值以月份和年份的形式出现。即, 1月15日,2月15日。如何以月和年的升序排列? 现在我得到的结果是: 4月15日2月15日 - 1月15日 - 3月15日 - 15日。但我希望得到如下结果: 1月15日 - 2月15日 - 3月15日 - 4月15日

 var months = ((from mnths in context.Table
                       orderby mnths.Month
                       select mnths.Month).Distinct()).ToList();

        return months;

感谢。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用DateTime.TryParseExact

var months = ((from mnths in context.Table
                   orderby mnths.Month
                   select mnths.Month).Distinct()).ToList().OrderBy(m =>
                   {
                        DateTime month;
                        return DateTime.TryParseExact(m, new[] {"MMM-yy"}, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out month)
                            ? month
                            : DateTime.MinValue;
                   }).ToList();

您需要在ToList之前致电OrderBy,以便执行原始查询,并获得IEnumerable<string>而不是IQueryable

答案 1 :(得分:0)

只需使用.NET排序方法即可。 首先从DB获取所有日期

var dates = ((from dts in context.Table
                         select dts).Distinct().ToList();

            return dates;

然后做

dates.Sort();
dates.Reverse();

你会得到你想要的结果。 (并在Db中存储日期时间,类型为datetime而非nvarchar或其他)。