我有一个列表"站点",其中一个项目为"从"和"到".它被定义为字符串,格式为"MM/yyyy".当我尝试根据年份对列表进行排序时,我遇到了一个小问题.
"From"和"To"的数据是
01/2012
04/2012
01/2013
06/2012
Run Code Online (Sandbox Code Playgroud)
当我使用orderby对列表进行排序时,我得到的输出是
01/2012
01/2013
04/2012
06/2012
Run Code Online (Sandbox Code Playgroud)
哪个不对.
List<Site> List = new List<Site>();
DataSet DS = ClientDB.Sites(Id);
if (DS.HasTable0AndRows())
{
IEnumerable<DataRow> _DataRow = DS.Tables[0].AsEnumerable();
List = _DataRow.Select(x => new Site()
{
FileNum = x["File_Num"].ToString(),
From = x["From"].ToString(),
To = x["To"].ToString(),
}).ToList();
}
return List.OrderBy(x => x.FileNum).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我明白我必须使用DateTime.Parseinorder来转换From和To但是DateTime.Parse当我返回列表时如何使用上面的情况呢?
小智 5
你需要自定义比较器.
class DateComparer : IComparer<string>
{
public int Compare(string a, string b)
{
var a_date = DateTime.ParseExact(a, "MM/yyyy", null);
var b_date = DateTime.ParseExact(b, "MM/yyyy", null);
return a_date.CompareTo(b_date);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
return List.OrderBy(x => x.From, new DateComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)