使用LINQ对类列表进行排序

使用LINQ对类列表进行排序,linq,Linq,我有一个列表,我想按MyClass的DateTime CreateDate属性对它进行排序 林克有可能吗 谢谢您可以按排序顺序枚举它: IEnumerable<MyClass> result = list.OrderBy(element => element.CreateDate); 这与对原始列表进行排序并不完全相同,因为如果任何人仍然有对旧列表的引用,他们将看不到新的排序。如果确实要对原始列表进行排序,则需要使用list.sort方法。以下是一个示例: using Sys

我有一个
列表
,我想按MyClass的
DateTime CreateDate
属性对它进行排序

林克有可能吗


谢谢

您可以按排序顺序枚举它:

IEnumerable<MyClass> result = list.OrderBy(element => element.CreateDate);
这与对原始列表进行排序并不完全相同,因为如果任何人仍然有对旧列表的引用,他们将看不到新的排序。如果确实要对原始列表进行排序,则需要使用
list.sort
方法。

以下是一个示例:

using System.Collections.Generic;
using System.Linq;

namespace Demo
{ 
    public class Test
    {
        public void SortTest()
        {
            var myList = new List<Item> { new Item { Name = "Test", Id = 1, CreateDate = DateTime.Now.AddYears(-1) }, new Item { Name = "Other", Id = 1, CreateDate = DateTime.Now.AddYears(-2) } };
            var result = myList.OrderBy(x => x.CreateDate);
        }
    }

    public class Item
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public DateTime CreateDate { get; set; }
    }
}
使用System.Collections.Generic;
使用System.Linq;
名称空间演示
{ 
公开课考试
{
公共无效排序集()
{
var myList=new List{new Item{Name=“Test”,Id=1,CreateDate=DateTime.Now.AddYears(-1)},new Item{Name=“Other”,Id=1,CreateDate=DateTime.Now.AddYears(-2)};
var result=myList.OrderBy(x=>x.CreateDate);
}
}
公共类项目
{
公共字符串名称{get;set;}
公共int Id{get;set;}
公共日期时间CreateDate{get;set;}
}
}

确保使用
.OrderBy()
的其他答案有效,但您不希望源项继承自
可比较的
,只需调用
.Sort()

对现有列表进行排序:

还可以编写
排序
扩展方法,允许:

list.Sort(x => x.CreateDate);
例如:

public static class ListExt {
    public static void Sort<TSource, TValue>(
            this List<TSource> list,
            Func<TSource, TValue> selector) {
        if (list == null) throw new ArgumentNullException("list");
        if (selector == null) throw new ArgumentNullException("selector");
        var comparer = Comparer<TValue>.Default;
        list.Sort((x,y) => comparer.Compare(selector(x), selector(y)));
    }
}
公共静态类listex{
公共静态无效排序(
这个名单,,
Func选择器){
如果(list==null)抛出新的ArgumentNullException(“list”);
如果(选择器==null)抛出新的ArgumentNullException(“选择器”);
var comparer=comparer.Default;
list.Sort((x,y)=>comparer.Compare(选择器(x),选择器(y));
}
}
使用:

List<T> ts = new List<T>(); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Sort((x,y) => DateTime.Compare(x.CreatedDate, y.CreatedDate));
List ts=newlist();
添加(新的T{CreatedDate=DateTime.Now});
添加(新的T{CreatedDate=DateTime.Now});
ts.Sort((x,y)=>DateTime.Compare(x.CreatedDate,y.CreatedDate));


你指的是DateTime类型的属性CreateDate吗?“你试过使用linq吗?”LOL-这就是问题所在!我怎样才能把最新的放在上面?按asc?
OrderByDescending
而不是
OrderBy
public static class ListExt {
    public static void Sort<TSource, TValue>(
            this List<TSource> list,
            Func<TSource, TValue> selector) {
        if (list == null) throw new ArgumentNullException("list");
        if (selector == null) throw new ArgumentNullException("selector");
        var comparer = Comparer<TValue>.Default;
        list.Sort((x,y) => comparer.Compare(selector(x), selector(y)));
    }
}
       class T  {
            public DateTime CreatedDate { get; set; }
        }
List<T> ts = new List<T>(); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Sort((x,y) => DateTime.Compare(x.CreatedDate, y.CreatedDate));