[英]Sorting months and years in a list
确保将DateTime.Parse
格式更改为,以便它除了月份之外还考虑年份:
DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture)
然后确保您更改了OrderBy
键选择器,以便在执行排序时它不仅考虑月份而且还考虑整个日期:
.OrderBy(x => x.Sort)
完整的代码如下所示:
var sortedMonths = monthsList
.Select(x => new { Name = x, Sort = DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture) })
.OrderBy(x => x.Sort)
.Select(x => x.Name)
.ToArray();
public class MonthAndYear
{
private string _monthAndYear;
public string Month { get; set; }
public IDictionary<string, int> Months { get; set; }
public int Year { get; set; }
public string MonthYear
{
get
{
return string.Concat(Month," ", Year);
}
set
{
_monthAndYear = value;
}
}
public MonthAndYear()
{
Months = new Dictionary<string, int>();
Months.Add("January", 1);
Months.Add("February", 2);
Months.Add("March", 3);
Months.Add("April", 4);
Months.Add("May", 5);
Months.Add("June", 6);
Months.Add("July", 7);
Months.Add("August", 8);
Months.Add("September", 9);
Months.Add("October", 10);
Months.Add("November", 11);
Months.Add("December", 12);
}
public int MonthInteger(string month)
{
if (Months.ContainsKey(month))
{
return Months[month];
}
else
return 1;
}
public List<MonthAndYear> SortMonthAndYear(List<string> _monthYearList)
{
List<MonthAndYear> _sortedMonthAndYear = new List<MonthAndYear>();
foreach (var _monthYear in _monthYearList)
{
_sortedMonthAndYear.Add
(
new MonthAndYear
{
Month = _monthYear.Substring(0, _monthYear.IndexOf(' ')),
Year = Convert.ToInt32(_monthYear.Substring(Math.Max(0, _monthYear.Length - 4)))
}
);
}
return _sortedMonthAndYear.OrderBy(y => y.Year).ThenBy(m => m.MonthInteger(m.Month)).ToList();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.