我正在爲ASP.NET MVC菜單編寫一個類。我希望能夠採取一切博客條目列表,並與此類似的存檔菜單:有沒有更好的解決方案這個清單<DateTime>排序?
1/2011 (2)
3/2011 (1)
4/2011 (12)
etc...
這裏是我使用的代碼:
public class ArchiveMenuModel
{
private List<ArchiveMenuItem> menuItems;
public List<ArchiveMenuItem> MenuItems { get { return menuItems; } }
public ArchiveMenuModel(List<DateTime> dates, string streamUrl)
{
menuItems = new List<ArchiveMenuItem>();
int itemCount = 0;
dates = dates.OrderByDescending(x => x).ToList();
for (int i=0; i<dates.Count; i++)
{
itemCount++;
if(i+1 < dates.Count)
{
if(!(dates[i].Month == dates[i + 1].Month && dates[i].Year == dates[i + 1].Year))
{
menuItems.Add(new ArchiveMenuItem(streamUrl, dates[i].Month, dates[i].Year, itemCount));
itemCount = 0;
}
}
else
{
menuItems.Add(new ArchiveMenuItem(streamUrl, dates[i].Month, dates[i].Year, itemCount));
}
}
}
}
有沒有更好的辦法,也許通過使用Linq或什麼?具體而言,我不喜歡我的代碼的部分是:
if(!(dates[i].Month == dates[i + 1].Month && dates[i].Year == dates[i + 1].Year))
如果我能避免這種醜陋的if語句,這將是偉大的!
有LINQ在那裏? ;-)請參閱[IEnumerable](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx)中的'OrderBy'和'GroupBy'。後者會讓你的團隊(然後可以對每個組中的元素進行計數),前者將得到團隊的排序。用「花哨的LINQ語法」裝飾...或作爲常規方法調用離開(我的首選方式)。這不是一個答案,因爲我只是不會放下任何代碼 - 在[LINQPad](http://linqpad.net)中玩一下並享受! – 2011-07-01 20:41:55
當我嘗試的時候,我很難得到入場人數。另外,GroupBy能夠按月還是不按時返回DateTime組? – quakkels
你想包括空的月份嗎?即如「5/2011(0)」? – svick