对泛型列表进行排序无法按预期工作

本文关键字:工作 排序 泛型 列表 | 更新日期: 2023-09-27 17:56:57

为了简化我的问题,我将举一个例子。假设我有一个包含datetimeinteger属性的objects列表。我首先按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

假设我的list中有这 4 个项目(一开始是无序的,上面是我最终想要的样子)。

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

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,但结果仍然相同。

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

对泛型列表进行排序无法按预期工作

解决方案:如果您对时间不感兴趣,请将您的键选择器更改为 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 是最后一个,因为它的日期更晚。

我怀疑您有DateTime Time不为 0 的值。

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