1

私はこのコードを持っていますが、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
      }
  }
}

これを修正する必要があります。アイデアを教えてください。ありがとう

4

2 に答える 2

3

Octobar月にはこれまでSUndayがないため、変数SelectedSundayは空です。

代わりに使用できますLastOrDefault()

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

注:DateTimeTypeのデフォルト値DateTime.Minはです1/1/0001 12:00:00 AM

于 2012-10-01T10:45:27.150 に答える
1

ここのコードにはいくつかの間違いがあります。

  1. 使用varは、どこでもやりたいことではありません。
  2. 関数で任意の値を使用しないでください。日が今日より前であることを確認する代わりに、制限パラメータを関数に追加DateTime.Now して呼び出しを渡す必要があります。
  3. あなたの関数は、今日より前の特定の月のすべての日曜日をすでに返しています。Linq リクエストは単なるコードの複製であり、毎回コレクション全体を返します。
  4. 今日は 10-01 で月曜日なので、今日より前の 10 月の日曜日はありません。これが、コレクションが空である理由です。
于 2012-10-01T10:58:59.557 に答える