C# 如何对通用列表Asc或Desc进行排序?
我有一个类型为MyImageClass的泛型集合,MyImageClass有一个布尔属性“IsProfile”。我想对这个通用列表进行排序,其中IsProfile==true位于列表的开头 我试过这个C# 如何对通用列表Asc或Desc进行排序?,c#,.net,asp.net,generics,sorting,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).ToList();
在上面的代码中,图像位于最后一个IsProfile属性为true的位置。
但我希望它位于第一个索引处。我需要一些Asc或Desc。然后我做了这个
rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).Reverse.ToList();
有没有更简单的方法
谢谢那么:
estate.Images.OrderByDescending(est => est.IsProfile).ToList()
这将按IsProfile属性按降序排列图像,然后根据结果创建一个新列表。您可以使用.OrderByDescending(…)-但请注意,使用LINQ方法创建的是一个新的有序列表,而不是对现有列表进行排序 如果您有一个
列表
,并且希望对现有的列表重新排序,那么您可以使用排序()
-并且可以通过添加一些扩展方法使排序更容易:
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)));
}
静态无效排序(此列表源、,
Func选择器){
var comparer=comparer.Default;
Sort((x,y)=>comparer.Compare(选择器(x),选择器(y));
}
静态void SortDescending(此列表源,
Func选择器){
var comparer=comparer.Default;
Sort((x,y)=>comparer.Compare(选择器(y),选择器(x));
}
然后你可以使用
list.Sort(x=>x.SomeProperty)
和list.SortDescending(x=>x.SomeProperty)
谢谢你的回答,很抱歉我没有必要,我不知道为什么我没有注意intellisense上OrderBy下的单词。再次感谢除了Marc的回答之外,还有其他方法可以对列表进行排序而不是创建新列表吗?您不想使用LINQ或内置的sort()方法进行排序的原因是什么?谢谢Marc,所以如果我使用LINQ进行排序,这是否意味着它会导致性能损失?嗯,很简单,但与数据绑定相比,您永远不会注意到它。这真的很有帮助。是否可以将其扩展为也执行orderby?@Ash,而不是“按原样”,因为它正在执行即时排序。这将需要更多的胶水来做它-比我现在能写的更多。。。