本月的所有星期日,本月还没有星期天,问题

时间:2012-10-01 10:29:33

标签: c# asp.net-mvc-3

我有这个代码,它失败了,因为thisMonthSundays是空的:

 public ActionResult TradeUKKPISearchesData() //show dropdownlist in the view
{
    var now = DateTime.Now;
    var lastMonth = now.AddMonths(-1);
    var thisMonthSundays = GetDatesOfSundays(now.Year, now.Month).OrderByDescending(x => x.Date);
    var lastMonthSundays = GetDatesOfSundays(lastMonth.Year, lastMonth.Month).OrderByDescending(x => x.Date); //problem here, must add some sort of check here?
    var sundaysToTakeFromLastMonth = 4;
    var sundays = thisMonthSundays.Concat(lastMonthSundays.Skip(Math.Max(0, lastMonthSundays.Count() - sundaysToTakeFromLastMonth)).Take(sundaysToTakeFromLastMonth));

    var allSundaysInThisMonth = new SundaysInMonthViewModel
    {
        AllSundays = sundays.Select(x => new SelectListItem
        {
            Value = x.ToString("dd/MM/yyyy"),
            Text = x.ToString("dd/MM/yyyy"),
        })
    };

    var selectedSunday = new SundaysInMonthViewModel
    {
        SelectedSunday = thisMonthSundays.Where(x => x <= now).Last() //failed here
    };

  return View(allSundaysInThisMonth);
}

private IEnumerable<DateTime> GetDatesOfSundays(int year, int month)
{
  var ci = CultureInfo.InvariantCulture;
  for (int i=1; i <= ci.Calendar.GetDaysInMonth(year, month); i++)
  {
      var date = new DateTime(year, month, i);
      if ((date.DayOfWeek == DayOfWeek.Sunday) && (date <= DateTime.Now))
      {
          yield return date; //skips all for this month
      }
  }
}

我需要解决这个问题,请帮忙提出想法? 感谢

2 个答案:

答案 0 :(得分:3)

由于Octobar月份到目前为止还没有Snday,变量SelectedSunday是空的....

您可以改为使用LastOrDefault()

SelectedSunday = thisMonthSundays.Where(x => x <= now).LastOrDefault() ;

注意:DateTime类型的默认值为DateTime.Min1/1/0001 12:00:00 AM

答案 1 :(得分:1)

您的代码中存在一些错误。

  1. 使用var不是你想要在任何地方做的事情。
  2. 您不应该在函数中使用任意值。您应该在函数中添加限制参数并传递DateTime.Now,而不是检查天数是否在今天之前。 在电话上。
  3. 您的功能已经返回给定月份之前的所有星期日。您的Linq请求只是代码的复制,并且每次都会返回整个集合。
  4. 由于今天是10月1日,我们是星期一,因此今天10月之前没有星期天。这就是你的收藏是空的原因。