-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が最後になります)。

0ではないDateTime値があると思われます。Time

キーセレクターをに変更して確認しますv => v.DateValue.Date

于 2013-01-31T18:59:46.173 に答える