3 ways to Sort in Descending order via lambdas

In C# , one can sort the List of Objects using Lambdas easily . Until now , i found the LINQ Query to be more easy to sort but after using the Lamba expression , i feel that the lambda expression can also be used effectively to sort in descending order .

For example , i use the below class for the data

public class Movie
{
   public string MovieName { get; set; }
   public string Actor { get; set; }
}
public class Movies : List<Movie>{
public Movies()
{  Add(new Movie { MovieName = "Endhiran", Actor = "Rajnikanth" });
   Add(new Movie { MovieName = "Velayutham", Actor = "Vijay" });
   Add(new Movie { MovieName = "Mankatha", Actor = "Ajith" });
   Add(new Movie { MovieName = "Nanban", Actor = "Vijay" });
   Add(new Movie { MovieName = "Kaavalan", Actor = "Vijay" });
}

}

To sort the Movie List in descending order by Actor , we can use the below LINQ Query

List movieList = new Movies();
var movies = (from movie in  movieList
orderby movie.Actor descending
select movie).ToList();
dataGridView1.DataSource = movies;

How do i use the Lambdas to sort the same list in descending order ? Its simple . There are different ways that one can use the lambdas to sort the list in descending .

1. Sorting the List in Ascending order via Lambda and then using the Reverse method of the List

List movieList = new Movies();
movieList.Sort((x, y) => x.Actor.CompareTo(y.Actor));
movieList.Reverse();
dataGridView1.DataSource = movieList;

2. Use the same sort method of the List but specify the minus symbol (-) while sorting

List movieList = new Movies();
movieList.Sort((x, y) => -x.Actor.CompareTo(y.Actor));
dataGridView1.DataSource = movieList;

When you use the + symbol instead of – , we get the list sorted in ascending order

3. Another simple way is to interchange the Comparer and CompareTo values like below

List movieList = new Movies();
movieList.Sort((x, y) => y.Actor.CompareTo(x.Actor));
dataGridView1.DataSource = movieList;

Definitely Learnt something today , seems like i need to learn more of the lambdas which i feel is simplifying lot of things :)

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.
Pin It

8 thoughts on “3 ways to Sort in Descending order via lambdas

  1. Pingback: 3 ways to Sort in Descending order via lambdas | .NET and C# | Syngu

  2. This is just wrong.

    The .NET framework includes orderby descending so that you use it.
    Another programmer who reads your code will begin to wander why did you add that minus, or switched the order in the CompareTo variables, and what even worse, why did you add that extra line with .Reverse, when you could just used OrderByDescending.

    Never try to reinvent the wheel, if it has already been invented before, especially if it’s included in the .NET framework.

    • Thanks for your feedback … The idea behind this is to explore other possibilities in .NET framework which u can use to sort . Definitely OrderBy and OrderByDescending is good . Also another point
      try the following
      List movieList = new Movies();
      movieList.OrderByDescending(a => a.MovieName).ToList();
      dataGridView1.DataSource = movieList;

      This will not wory and instead the below works … :)

      dataGridView1.DataSource = movieList.OrderByDescending(a => a.MovieName).ToList();

  3. Pingback: Interesting .NET Links - Sptember 15 , 2011 | Tech Blog

  4. Pingback: 3 ways to Sort in Descending order via lambdas | ProgramInDotnet

Leave a Reply

Your email address will not be published. Required fields are marked *