Skip Navigation LinksHome > Code > View Code
          My Code      Submit Code
   |       Categories   Top 50
Sorting a List of Objects on Multiple Properties (C#,LINQ)
This sample demonstrate how you can sort your custom object list on multiple properties. Key thing to note is two of it's properties are Enum.
//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();
By:Keyur(0) Views:192
Bookmarked: 0 last Modified:1/20/2010 11:55:37 AM report

Embed:
  Copy this code and paste it in your HTML
 
Tags: LINQC#sort list of objectsSort using multiple properties



Comments:




Write Comment..

Please Login to write comments..
 
comments:
 
   
 
 

User Login
Username :
Password :
Register Login

Forgot Password