4

このメソッドを使用して、データから週の開始のリストを取得しています。ただし、月末には1週間が2か月に分割される可能性がありますが、メソッドを使用して分割された週をチェックして月を取得するのに苦労しています。

月のリストを取得する方法

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

週が分かれているかどうかを確認する方法

public static bool isSplitWeek(System.DateTime Enddate, System.DateTime Startdate)
{
    bool isSameMonth = (Enddate.Month == Startdate.Month) ? true : false;

    return !isSameMonth ? true : false;

}

私は基本的に、x.WKENDstartと表示されているifを使用しようとしています。そうすれば、1週間が1か月で始まり、別の月で終わる場合、両方の月を取得できます。

4

2 に答える 2

3

あなたはこの方法を考えすぎているようです:

public static bool isSplitWeek(System.DateTime Enddate, System.DateTime Startdate)
{
    return Enddate.Month != Startdate.Month;
}


したがって、おそらく次のようなものです。

public static IList<string> TransformDates(DateTime start, DateTime end)
{
    List<string> months = new List<string>
    {
        start.ToString("MMM yyyy", 
                CultureInfo.CreateSpecificCulture("en-US"))
    };

    if (isSplitWeek(start, end))
    {
        months.Add(end.ToString("MMM yyyy", 
                CultureInfo.CreateSpecificCulture("en-US")));
    }

    return months;
}

..。

var monthlist = data
    .Select(x => new 
    { 
        start =  x.WKENDstart,
        end = x.WKENDstart.AddDays(6)
    })
    .OrderBy(y => y.start )
    .Select(m => new
    {
        monthname = TransformDates(m.start, m.end) // IList<string> 
    })
    .Distinct()
    .ToList();
于 2012-04-05T13:54:33.497 に答える
2

この問題にどのように取り組むかを決定した後、.WHERE句と.Unionを使用することにしました。これにより、あるセクションで通常の週を処理し、別のセクションで週を分割して、それらを結合することができました。この問題の鍵は、where句を使用することでした。

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

  var monthlist2 = 
     data.Select(x => new { wkdate = x.WKENDDATE.AddDays(6) }).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 = monthlist2.Union(monthlist1)
   .Distinct()
   .ToList(); 
于 2012-04-05T15:35:22.203 に答える