使用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));