-1

为了简化我的问题,我将举一个例子。假设我有一个objects包含一个datetime和一个integer属性的列表。我首先按datetime字段排序列表项,然后按integer属性排序。

Item #   Date Value  Int Value
  1      2012-01-01     0
  2      2012-01-01     4
  3      2012-01-01     6
  4      2012-01-01     13

假设我有这 4 件物品list(起初未订购,以上是我希望它最终的样子)。

我只是通过以下方式订购它们:

myList = myList.OrderBy(v=>v.MyDateValue).ThenBy(v=>v.MyIntValue).ToList();

执行上面的行后,结果如下:

Item #   Date Value  Int Value
  1      2012-01-01     0
  4      2012-01-01     13
  2      2012-01-01     4
  3      2012-01-01     6

起初我认为它会将我的int值解释为一个string可能(可能不是一个合乎逻辑的陈述,只是在相当长的一段时间内对此感到困惑)然后我将我的int值更改为 10、11、12、13,但结果仍然相同。

知道为什么这不起作用吗?或者我做错了什么?

4

1 回答 1

2

v => v.DateValue.Date解决方案:如果您对时间不感兴趣,请将您的键选择器更改为。

我无法复制您描述的行为。以下按预期工作:

    private class Foo
    {
        public DateTime Date { get; set; }
        public int Id { get; set; }
    }

    static void Main(string[] args)
    {
        var myList = new List<Foo>
                         {
                             new Foo {Date = new DateTime(2012, 01, 01), Id = 12},
                             new Foo {Date = new DateTime(2012, 01, 01), Id = 1},
                             new Foo {Date = new DateTime(2012, 01, 03), Id = 7},
                             new Foo {Date = new DateTime(2012, 01, 01), Id = 4},
                         };

        var newList = myList.OrderBy(v => v.Date).ThenBy(v => v.Id).ToList();
        foreach (var f in newList)
        {
            Console.WriteLine("{0}, {1}", f.Date, f.Id);
        }

        Console.ReadLine();
    }

输出项目顺序为 1、4、12 和 7。(7 是最后一个,因为它的日期较晚。)

我怀疑你的DateTimeTime不是 0。

通过将您的密钥选择器更改为 来验证这一点v => v.DateValue.Date

于 2013-01-31T18:59:46.173 回答