Linq与DateTime.Parse

ERR*_*ERR 0 c# linq datetime

我有一个列表"站点",其中一个项目为"从"和"到".它被定义为字符串,格式为"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)