C# 月份和年份清单

C# 月份和年份清单,c#,asp.net-mvc,linq,razor,asp.net-mvc-4,C#,Asp.net Mvc,Linq,Razor,Asp.net Mvc 4,我正在尝试创建一个存档,括号内是每月的项目数,我得出了如下结论:- @{ var startMonth = DateTime.Now.Month; var startYear = DateTime.Now.Year; var blogList = Model.BlogViewModel.BlogArchiveList; var monthName = DateTime.Now.ToString("MMMM"); var Counter = 0; } @foreach (var

我正在尝试创建一个存档,括号内是每月的项目数,我得出了如下结论:-

@{
  var startMonth = DateTime.Now.Month;
  var startYear = DateTime.Now.Year;
  var blogList = Model.BlogViewModel.BlogArchiveList;
  var monthName = DateTime.Now.ToString("MMMM");
  var Counter = 0;
}
@foreach (var item in blogList)
{
  if (item.BlogDate.Year == startYear)
  {
      if (item.BlogDate.Month == startMonth)
      {
          Counter = Counter + 1;
      }
      else
      {
          Counter = 1;
          startMonth = item.BlogDate.Month;
      }
  }
  else
  {
      Counter = 1;
      startYear = item.BlogDate.Year;
      startMonth = item.BlogDate.Month;
  }
  monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(startMonth);
  @Html.ActionLink(monthName + " " +  startYear + "("+ Counter +")", "Archive", new  
  {
     year=startYear, month=startMonth}) <br/>
  }
@{
var startMonth=DateTime.Now.Month;
var startYear=DateTime.Now.Year;
var blogList=Model.BlogViewModel.blogachivelist;
var monthName=DateTime.Now.ToString(“MMMM”);
var计数器=0;
}
@foreach(blogList中的var项)
{
如果(item.BlogDate.Year==startYear)
{
如果(item.BlogDate.Month==startMonth)
{
计数器=计数器+1;
}
其他的
{
计数器=1;
startMonth=item.BlogDate.Month;
}
}
其他的
{
计数器=1;
startYear=item.BlogDate.Year;
startMonth=item.BlogDate.Month;
}
monthName=CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(startMonth);
@ActionLink(monthName+“”+startYear+“”(“+Counter+”),“存档”,新增
{
年=开始月,月=开始月})
}
虽然这似乎有效,但如果有多个条目,我会将月份写多次

我怎样才能避免在得到该月的帖子数量的同时,重复写该月的文章

感谢您的帮助和时间

尝试使用下一个代码:

var statistics = 
     blogList.GroupBy(val => new {val.BlogDate.Month, val.BlogDate.Year})
             .OrderBy(item => item.Key.Year)
             .ThenBy(item => item.Key.Month)
             .Select (grouped => new {Month = grouped.Key.Month, Year = grouped.Key.Year, Count = grouped.Count() });

foreach (var item in statistics)
{
    var monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(item.Month);
    Console.WriteLine (string.Format("{0} {1} ({2})", monthName, item.Year, item.Count));   
}
例如,打印正确的结果

December 2012 (3)
January 2013 (4)

使用缩进重新格式化我注意到您至少缺少一个
}
。这是下一个字符还是你的代码块有更多的字符?哦。。。请在将来缩进--您正在寻求帮助,当我们查看您的代码时,不要让我们的眼睛流血--谢谢@Hogan很抱歉我漏掉了1}。如何缩进?在代码窗口中粘贴代码总是一件困难的事情编辑器中有一个帮助按钮,它的解释比我能解释的更好,但有一种方法是放入空格,只要一行以超过4个空格开头,它就会将其格式化为代码,然后空格就很重要。点击我名字上方的“编辑的x分钟前”来查看我所做的更改——这也应该会有帮助。很酷,谢谢霍根,下次我会这么做的谢谢伊利亚工作顺利!在局部视图中包含“var统计信息”可以吗?还是从控制器传递它更好?您肯定应该从控制器传递它。视图应尽可能简单,控制器也应尽可能简单。与应用程序中的所有内容非常相似。但无论如何,不要考虑统计数据,维护和测试都很困难。怎么做?我可以在@ViewBag.statistics中传递它,但是我在大约3个页面中嵌入了PartialView,并且我在BlogController中有一个ActionResult,但这是一直被触发的。我如何触发它?看看模型应该如何传递到局部视图中,谢谢Ilya。因此,我必须首先用统计列表预先填充ViewModel。