How to Sort Generic List Using Lambda Expression For Dynamic Type And Dynamic Property ?

This tips explained how to write a code which is flexible and generic enough to sort any type of collection and also the property based on which it has to be sorted will be dynamic.This is very much easy to hit this requirement using Lamda Expression.

Below code will do this for you.

public class Utility
{
        /// <Summary>
        /// Gets the sorted list.
        /// </Summary>
        /// <param name="source" />The source.
        /// <param name="sortColumn" />The sort column.
        /// <param name="sortDirection" />The sort direction.
        /// <The sorted list. />
        private List GetSortedList(List source, string sortColumn, SortDirection sortDirection)
        {
            // Prepare the dynamic sort expression
            var paramExp = Expression.Parameter(typeof(T), typeof(T).ToString());
            Expression propConvExp =
                             Expression.Convert(Expression.Property(paramExp, sortColumn), typeof(object));
            var sortExp = Expression.Lambda>(propConvExp, paramExp);
 
            if (sortDirection == SortDirection.Ascending)
            {
                return source.AsQueryable().OrderBy(sortExp).ToList();
            }
            else
            {
                return source.AsQueryable().OrderByDescending(sortExp).ToList();
            }
        }
}

We will call this method as below

List<Employee> sortedEmployees
= new Utility<Employee>().GetSortedList(employeeList, "City", SortDirection.Ascending);

First we create the parameter expression for the generic type and on the further two statements we are promting the expression to convert the dynamic property based on which we need to sort to a understandable format of lambda. Then we go ahead and use the sort of generic list.

Shared By : Jebarson
Original Post : http://jebarson.info/post/2011/03/03/Sort-Generic-List-Using-Lambda-Expression-For-Dynamic-Type-And-Dynamic-Property.aspx

Jebarson

Jebarson is a consultant at Microsoft. In his overall experience of 7+ years, his expertise ranges from VB6, COM / DCOM, .net, ASP.net, WPF, WCF, SL, SQL. He has a greater love for OOA / OOD and SOA. His current focus is on Azure, Windows Phone 7, Crm and much more. He is also a frequent speaker of different community events. He blogs at http://www.jebarson.info/ . You can follow him at @Jebarson007 . Jebarson having good set of tutorials written on Windows Azure, you can found them http://bit.ly/houBNx . He is a contributor of this site and shared many tips and tricks.