2012-04-05 10 views
4

私はこのメソッドを使用して、私のデータから週の開始のリストを取得しています。私は数ヶ月にリストを取得する月のリストを取得するメソッドで分割週を取得する

方法を得るために、私の方法では、分割数週間を確認するために私の方法を使用して苦労していますが ただし、月末の週は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(); 

そのスプリット週Imは基本的にトンをしようと

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

    return !isSameMonth ? true : false; 

} 

かどうかを確認する方法のx.WKENDstartと言うと、1週間に1ヶ月が始まり、別の月に終わると、2ヶ月になる。

+1

働いていない何 – AakashM

+0

...私はupvotersについてはよく分からないが、私は私の部分のためにあなたが求めているものはほとんど考えを持っていますか? – Msonic

+3

!isSameMonth?正誤; 2日後に読むのは難しい – Ivo

答えて

2

...

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; 
} 

:だから、おそらくのようなものを

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


をこの問題に私は.WHERE節と.Unionを使用することに決めました。 dこれで私は1つのセクションで通常の週を処理し、別のセクションで週を分割し、それらを一緒に結合することができました。問題の鍵は、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(); 
3

あなたがこの方法を考えて上のように見える:どのように私ができるに決定した後

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(); 
+0

これは間違いなく明確ですが、OPのメソッドとまったく同じであるため、問題を解決するとは思わないでしょう。 – Msonic

+0

このメソッドを簡略化してくれてありがとうございます。しかし、私はlinqメソッド –

+0

@bugzで 'WKENDstart'を持つオブジェクト/クラスを投稿する方法を教えてください。 – Joe