我正在使用此方法从我的数据中获取周开始列表。 但是,在本月底,一周可能是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,这样我就可以获得两个月,如果一个星期在一个月内开始,到另一个星期结束。
答案 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();