使用LINQ对类列表进行排序

3

我有一个 List<MyClass>,我想通过 MyClass 的 DateTime CreateDate 属性对其进行排序。

使用 LINQ 可以实现吗?

谢谢。


您的意思是指创建日期属性,它的类型是 DateTime 吗? - vdh_ant
5个回答

5

对现有列表进行排序:

list.Sort((x,y) => x.CreateDate.CompareTo(y.CreateDate));

您可以编写一个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)));
    }
}

4
你可以按照排序顺序枚举它:
IEnumerable<MyClass> result = list.OrderBy(element => element.CreateDate);

你也可以使用 ToList() 将其转换为新列表并重新分配给原始变量:
list = list.OrderBy(element => element.CreateDate).ToList();

这与对原始列表进行排序不完全相同,因为如果任何人仍然引用旧列表,则不会看到新的排序。如果您实际上想对原始列表进行排序,则需要使用 List<T>.Sort 方法。


如何将最新的放在顶部?按升序排列吗? - Kubi
1
使用OrderByDescending代替OrderBy - Mark Byers

1

这里是一个示例:

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; }
    }
}

1
你尝试过使用linq吗?哈哈,这就是问题所在! - Aaronaught

0
       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));


0

其他使用.OrderBy()的答案也可以,但是你是否更愿意让源项目继承IComparable并调用.Sort()呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接