4

我正在使用这种方法从我的数据中获取周开始列表。但是,在月底,一周可能是两个月之间的间隔,但是我很难使用我的方法来检查我的方法中的间隔周以获取月份

获取月份列表的方法

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,这样如果一周从一个月开始并在另一个月结束,我就会得到两个月。

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 回答