我有一个列表“网站”与项目,如“年”的一个。它被定义为字符串,格式为“MM/YYYY”。 数据的“年”是分割字符串和排序 - LINQ的
01/2012
04/2012
01/2013
06/2012
我明白,我可以使用DateTime.Parse
将字符串转换和排序。但我想分割字符串并使用linq进行排序。是否有可能将MM和yyyy分开排序?
我有一个列表“网站”与项目,如“年”的一个。它被定义为字符串,格式为“MM/YYYY”。 数据的“年”是分割字符串和排序 - LINQ的
01/2012
04/2012
01/2013
06/2012
我明白,我可以使用DateTime.Parse
将字符串转换和排序。但我想分割字符串并使用linq进行排序。是否有可能将MM和yyyy分开排序?
那么,在对方的回答表明,你可以做到这一点。我的答案使用匿名结构,所以排序应该更有效率。
method1Result
显示什么我会做(假定该数据始终有效)。主要优点是,你必须DateTime
对象,因此它会更容易使用之后。
method2Result
根据问题的要求不要使用DateTime.Parse
。但是,它会导致代码更长,结果可用性也会降低(如果需要将其返回,则必须将匿名结构替换为您定义的结构。)
var data = new string[]
{
"01/2012",
"04/2012",
"01/2013",
"06/2012",
};
var method1Result = data
.Select(x => DateTime.Parse(x)).OrderBy(x => x);
var method2Result = data
.Select(x =>
{
var t = x.Split('/');
return new {
year = int.Parse(t[1]),
month = int.Parse(t[0]) };
})
.OrderBy(x => x.year)
.ThenBy(x => x.month);
当然,这可以轻松完成。然而,这是低效的,因为你必须做的每个比较分裂:
.OrderBy(yearMonthStr => {
var tokens = yearMonthStr.Split('/');
return int.Parse(tokens[0]) + 100*int.Parse(tokens[1])
})