如何在c#中按日期时间对集合进行排序

use*_*968 43 c# sorting

我有一个List,我需要按DateTime排序,类MyStuff看起来像:

public class MyStuff
{
   public int Type {get;set;}
   public int Key {get;set;}
   public DateTime Created {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要能够通过Created(DateTime)字段对集合List进行排序.

Nol*_*rin 86

您似乎正在使用List<T>对象,在这种情况下,最有效(和简单)的方法如下:

myList.Sort((x, y) => DateTime.Compare(x.Created, y.Created));
Run Code Online (Sandbox Code Playgroud)

这使用List.Sort方法的重载而不是Comparison<T>委托(因此使用lambda表达式).

你当然可以使用LINQ OrderBy扩展方法,但我不认为这会带来任何好处,并且可能会明显变慢,具体取决于你的情况.

myList = myList.OrderBy(x => x.Created).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 这两种方法的主要区别在于:List <T> .Sort`对现有列表进行排序,而`OrderBy`返回一个新的`IEnumerable <T>`并单独留下列表.如果您想要保留原始列表,那么这可能是一个优势,如果您不想保留原始列表,则可能会受到影响. (13认同)
  • @batmaci 要按降序排序,只需在比较中交换 x 和 y 的位置即可。`myList.Sort((x, y) =&gt; DateTime.Compare(y.Created, x.Created));` (2认同)

pop*_*ter 7

var query = 
    from m in mystuffcollection
    orderby m.Created ascending
    select m;
Run Code Online (Sandbox Code Playgroud)