我有一个“网站”列表,其中一个项目为“年份”。它被定义为一个字符串,格式为“MM / yyyy”。 “年”的数据是
01/2012
04/2012
01/2013
06/2012
我知道我可以使用DateTime.Parse
转换字符串并对其进行排序。但我想拆分字符串并使用linq进行排序。是否有可能拆分MM和yyyy,对其进行排序?
答案 0 :(得分:1)
当然,这很容易做到。但是,这是低效的,因为您必须对每次比较进行拆分:
.OrderBy(yearMonthStr => {
var tokens = yearMonthStr.Split('/');
return int.Parse(tokens[0]) + 100*int.Parse(tokens[1])
})
答案 1 :(得分:1)
好吧,正如另一个答案所示,你可以做到。我的回答是使用匿名结构,因此排序应该更有效。
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);