4

linqで月の名前と年で並べ替えるにはどうすればよいですか。現在、アルファベット順に並べられているため、レポートが表示されるときに問題が発生します。

2011年11月、2011年12月、2012年1月、2012年2月を探しています

私の主な関心事は、monthlist1とmonthlist2の和集合であるため、結果のMonthListにあります。

ヘルプと洞察に感謝します

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(); 
4

3 に答える 3

7

wkdateString値であり、ではないため、アルファベット順に並べ替えていDateTimeます。最初に解析する必要があります。

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

現在の値は(たとえば)wkdateの形式に従っているため、すべて正しく解析されると思います。これは大胆な仮定です、私は知っています。MMM yyyyApr 2012

Stringまた、最終結果の表現に値をフォーマットし直す必要があります。

于 2012-04-13T13:21:11.367 に答える
0
var monthlist1 = data.
    Select(x => new { wkdate = x.WKENDDATE }).
    OrderBy(x=> CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Month)).
    ThenBy(x=> x.Year).
    Select(m => new { 
        monthname = m.wkdate.ToString("MMM yyyy", 
                                      CultureInfo.CreateSpecificCulture("en-US")) 
        }).
    Distinct().
    ToList();
于 2012-04-13T13:21:07.480 に答える
0

のようなもの

var monthlist1 = data.Select(m => new DateTime(m.WKENDDATE.Year,
                                                 m.WKENDDATE.Month,
                                                 1);

var monthlist2a = 
    data.Select(x => 
        new { wkdate = ExportHelper.getSplitEndDate(x.WKENDDATE).AddDay(1)})
    .Where(l => 
        ExportHelper.isSplitWeek(l.wkdate.AddDays(-6), l.wkdate) == true);

var monthlist2b = monthlist2a.Select(m => new DateTime(m.WKENDDATE.Year,
                                                 m.WKENDDATE.Month,
                                                 1);


var monthlist = monthlist1.Union(monthlist2b).Distinct()
                 .OrderBy(m => (m.Year * 100) + m.Month)
                 .Select(m => 
        m.ToString("MMM yyyy", CultureInfo.CreateSpecificCulture("en-US"));

このようにして、不要なフォーマットと解析を回避します

于 2012-04-13T13:23:55.960 に答える