2009-02-10 101 views
21

我有一个MyImageClass类型的泛型集合,MyImageClass有一个布尔属性“IsProfile”。我想排序这个通用列表,IsProfile == true站在列表的开始。如何对通用列表Asc或Desc进行排序?

我试过这个。

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

与上面的图像代码站在最后哪个IsProfile属性为true。 但我希望它在第一个索引。我需要一些东西Asc或描述。然后我做到了。

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

有没有更简单的方法来做到这一点?

感谢

回答

39

如何:

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

这将责令图片由IsProfile属性降序排列,然后创建结果的新名单。

+0

=>而不是 - > – 2009-02-10 12:00:43

+0

修复了Ray。 – 2009-02-10 12:01:23

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)

相关问题