每月名称和年份的linq订单(MMM yyyy字符串)

HEL*_*_ME 4 c# linq asp.net

我如何按照linq中的月份名称和年份进行订购,它目前按字母顺序排序,这会在显示报告时导致问题

我要找2011年11月,2011年12月,2012年1月,2012年2月

我主要担心的是结果MonthList,因为它是monthlist1和monthlist2之间的联合

感谢您的帮助和见解

var monthlist1 = data.
    Select(x => new { wkdate = x.WKENDDATE }).
    OrderBy(y => y.wkdate).
    Select(m => new { 
        monthname = m.wkdate.ToString("MMM yyyy", 
                                      CultureInfo.CreateSpecificCulture("en-US")) 
        }).
    Distinct().
    ToList();

var monthlist2 =
    data.Select(x => new { wkdate = 
          ExportHelper.getSplitEndDate(x.WKENDDATE).AddDays(1)})
         .OrderBy(y => y.wkdate)
         .Where(l => ExportHelper.isSplitWeek(l.wkdate.AddDays(-6), l.wkdate) == true)
         .Select(m => new { 
                   monthname = m.wkdate.ToString("MMM yyyy", 
                   CultureInfo.CreateSpecificCulture("en-US")) 
               })
              .Distinct()
              .ToList();

var monthlist = 
    monthlist1.
    Union(monthlist2).
    Distinct().
    OrderBy(m=> m.monthname).
    ToList(); 
Run Code Online (Sandbox Code Playgroud)

Yuc*_*uck 6

它按字母顺序排序,因为它wkdate是一个String值,而不是一个DateTime.你需要先解析它:

var monthlist = monthlist1.Union(monthlist2)
    .Distinct()
    // monthname is a String in format MMM yyyy
    .OrderBy(m => DateTime.Parse(m.monthname))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

我假设,因为你的当前wkdate值遵循的格式MMM yyyy(例如Apr 2012),他们将所有的分析正确.我知道,这是一个大胆的假设.

您还必须将值格式化为String表示最终结果.