如何对Generic List Asc或Desc进行排序?

时间:2009-02-10 11:55:56

标签: c# .net asp.net generics sorting

我有一个MyImageClass类型的泛型集合,而MyImageClass有一个布尔属性“IsProfile”。我想对这个通用列表进行排序,其中IsProfile == true代表列表的开头。

我试过这个。

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).ToList();

图像上方的代码位于IsProfile属性为true的最后一个位置。 但我希望它成为第一个指数。我需要一些 Asc或Desc 。然后我做了这个。

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).Reverse.ToList();

有没有更简单的方法呢?

由于

2 个答案:

答案 0 :(得分:39)

怎么样:

estate.Images.OrderByDescending(est => est.IsProfile).ToList()

这将按IsProfile属性按降序排列图像,然后从结果中创建一个新列表。

答案 1 :(得分:33)

您可以使用.OrderByDescending(...) - 但请注意,使用LINQ方法,您将创建一个新的有序列表,而不是对现有列表进行排序。

如果您有List<T>并希望重新订购现有列表,那么您可以使用Sort() - 并且可以通过添加一些扩展程序来简化方法:

static void Sort<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
static void SortDescending<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}

然后您可以使用list.Sort(x=>x.SomeProperty)list.SortDescending(x=>x.SomeProperty)