有人能告诉我为什么这个lambda排序表达式不起作用?

BDW*_*BDW 4 c# lambda

我是lambda表达的新手,只是遇到了一些我不理解的东西.

我有一个像这样的对象:

class MyListItem
{
   string date; //date in the format "2010-12-05"
   int Hour;    //hour of day as an int

}
Run Code Online (Sandbox Code Playgroud)

我有一个这些对象的列表,代表一些日期和时间.

我想按日期和小时对此列表进行排序,所以我试试这个:

List<MyListItem> myList = new List<MyListItem>();

myList = getsomedata(); //populate list

myList.Sort((a, b) => (a.date + a.Hour.ToString()).CompareTo(b.date + b.Hour.ToString()));
Run Code Online (Sandbox Code Playgroud)

这是有效的.问题是小时是一个int,所以它有时不是2位数,导致这样的类型:

2010-12-05 1
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 2
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)

我希望它像:

2010-12-05 1
2010-12-05 2
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)

所以我尝试格式化字符串以在我在lambda中解析之前添加零:

ret.Sort((a, b) => (a.date + a.Hour.ToString("00")).CompareTo(b.date + b.Hour.ToString("00")));
Run Code Online (Sandbox Code Playgroud)

但它不会编译.它告诉我:

Cannot convert lambda expression to type 'Systems.Collections.Generic.IComparer<MyListItem>' because it is not a delegate type. 
Run Code Online (Sandbox Code Playgroud)

咦?在这种情况下,普通.ToString()(没有格式字符串)和.ToString("00")之间有什么不同?

另外,有关如何使这项工作的任何建议?

Mar*_*ell 5

我不是在PC上,所以我无法解释第一个,但我会回避它:

ret.Sort((a,b) => {
    int result = string.Compare(a.date,b.date);
    if(result==0) result = a.hour.CompareTo(b.hour);
    return result;
});
Run Code Online (Sandbox Code Playgroud)

减少字符串创建,不解析开销等;)