【问题标题】:How to sort Generic List Asc or Desc?如何对通用列表 Asc 或 Desc 进行排序?
【发布时间】:2010-10-06 15:08:04
【问题描述】:

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

我试过了。

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

在上面的代码中,图像位于最后一个 IsProfile 属性为真。 但我希望它位于第一个索引处。我需要一些东西Asc 或 Desc。然后我就这样做了。

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

有没有更简单的方法?

谢谢

【问题讨论】:

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


    【解决方案1】:

    怎么样:

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

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

    【讨论】:

    • 感谢您的回答并为我的不必要感到抱歉,我不知道为什么我没有注意智能感知上 OrderBy 下的单词。再次感谢
    • 除了 Marc 的回答之外,还有其他方法可以只订购列表而不是创建新列表
    • 您不想使用 LINQ 进行排序或使用内置的 Sort() 方法进行排序的原因是什么?
    【解决方案2】:

    您可以使用 .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=&gt;x.SomeProperty)list.SortDescending(x=&gt;x.SomeProperty)

    【讨论】:

    • 感谢 Marc,所以如果我使用 Linq 进行订购,是否意味着它会导致性能损失?
    • 嗯,以非常小的方式,但与数据绑定相比,您永远不会注意到它。
    • 这真的很有帮助。这可以扩展到也做 ThenOrderBy 吗?
    • @Ash,而不是“原样”,因为它正在执行立即排序。它需要更多的胶水来完成——比我现在写的要多……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2012-05-17
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多