在方法中获得分周数以获得月份列表

时间:2012-04-05 13:50:32

标签: c# asp.net linq

我正在使用此方法从我的数据中获取周开始列表。 但是,在本月底,一周可能是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;

}

我基本上试图使用if而不是x.WKENDstart,这样我就可以获得两个月,如果一个星期在一个月内开始,到另一个星期结束。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();