如何按时间顺序列出月份字符串

时间:2017-04-17 04:39:49

标签: c# asp.net-mvc linq

我有一个BudgetHistory类,在该类中我将Title属性声明为public string Title。标题设置为BudgetHistory项目的月份和年份,因此如果您想查看2017年2月预算的历史记录,那么其名称是2017年2月。我正在尝试订购字符串这样几个月在迭代时按时间顺序出现。因此,当我在foreach模型上执行BudgetHistory循环时,列表​​应显示为1月,2月,3月等。我将如何进行此操作?

这就是我的foreach循环现在的样子:

<ul class="treeview-menu">

    @foreach (var item in (from w in Model group w by w.Title into n select n))
    {
        <li><a href="@Url.Action("Index", "BudgetHistories", new { Title = item.First().Title })"><i class="fa fa-dollar"></i> <span>@item.First().Title</span></a></li>
    }

</ul>

我之所以设置它的方式是因为有许多具有相同标题的交易,我按标题对这些交易进行分组,只显示具有该标题的所有交易。

2 个答案:

答案 0 :(得分:1)

GroupByReverse不对您的数据进行排序,因为Title已按数据排序,但您可以更改其顺序,然后尝试GroupReverse检查其仍然排序 你可以试试这个

<ul class="treeview-menu">

    @foreach (var item in (Model.OrderBy(x => DateTime.ParseExact(x.Title, "MMMM yyyy", CultureInfo.InvariantCulture) ).GroupBy(x=>x.Title)))
    {
        <li><a href="@Url.Action("Index", "BudgetHistories", new { Title = item.First().Title })"><i class="fa fa-dollar"></i> <span>@item.First().Title</span></a></li>
    } 

</ul>
上面的代码DateTime.ParseExact中的

February 2017转换为DateTime格式,
 此处MMMM yyyy代表Title的{​​{3}},因为您可以对日期时间进行排序,DateTime Format用于对assending order

中的数据进行排序

答案 1 :(得分:0)

您可以添加将var newPassword = password.replacingOccurrences(of: "a", with: "A", options: NSString.CompareOptions.literal, range: nil) 转换为Title然后按此值排序的属性。

此方法将来会很有用,例如获得一季度或一年的预算。

DateTime