2009-02-10 62 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)

相關問題