//Participating Classes
///
/// Base Item Class , whose list we are trying to sort
///
public class ChartRowItem
{
public int ItemId { get; set; }
public string ItemCategory { get; set; }
public string ItemName { get; set; }
public ItemRank ItemsRank { get; set; }
public ItemTrend ItemsTrend { get; set; }
}
///
/// Enum defining item Ranks
///
public enum ItemRank
{
Best,
Better,
Good,
}
///
/// Enum defining Item Trends
///
public enum ItemTrend
{
Increasing,
Stable,
Decreasing,
}
///
/// Custom Implementation for Rank Comparision
///
public class ChartRowItemRankComparor : IComparer
{
public int Compare(ItemRank x, ItemRank y)
{
if (Convert.ToInt32(x) == Convert.ToInt32(y))
{
return 0;
}
return (Convert.ToInt32(x) > Convert.ToInt32(y)) ? 1 : -1;
}
}
///
/// Custom Implementation for Trend Comparision
///
public class ChartRowItemTrendComparor : IComparer
{
public int Compare(ItemTrend x, ItemTrend y)
{
if (Convert.ToInt32(x) == Convert.ToInt32(y))
{
return 0;
}
return (Convert.ToInt32(x) > Convert.ToInt32(y)) ? 1 : -1;
}
}
//Considering that you have a list named List Rowitems
//Usage of LINQ and Custom Sort Comparor
//Creating comparor instances
ChartRowItemRankComparor rankComparor = new ChartRowItemRankComparor();
ChartRowItemTrendComparor trendComparor = new ChartRowItemTrendComparor();
//Sort the List By ItemRank and then by ItemTrend
List newlist = Rowitems.OrderBy
(tt => tt.ItemsRank, rankComparor).ThenBy
(tt => tt.ItemsTrend, trendComparor).ToList();
//ReverseSort the List By ItemRank and then by ItemTrend
List reverselist = Rowitems.OrderByDescending
(tt => tt.ItemsRank, rankComparor).ThenByDescending
(tt => tt.ItemsTrend, trendComparor).ToList();