Different Sorting techniques (delegate with anonymous method, lamda)
In this article, I have given a code snippet that can refer while writing your code for sorting a collection of objects based on various criteria. First technique is based on delegate, where anonymous method is used to compare and return data. Rest of the techniques are based on lambda expressions. Different GridView are used to present outputs of separate Sorting.
Sorting Techniques
Following sections demonstrate different Sorting techniques on a list data.To learn, create an Asp.net Web Application Project in VS 2010 and paste following code snippets.
User Interface (aspx) :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sorting.aspx.cs" Inherits="WebApplication1.Sorting" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvOriginal" runat="server" Caption="Original List Of Persons">
</asp:GridView>
<br />
<asp:GridView ID="gvSortedOnSalary" runat="server" Caption="Sorted on Salary">
</asp:GridView>
<br />
<asp:GridView ID="gvSortedOnLaneNameApproach1" runat="server"
Caption="Sorted on Lane Name (Approach #1)">
</asp:GridView>
<br />
<asp:GridView ID="gvSortedOnLaneNameApproach2" runat="server"
Caption="Sorted on Lane Name (Approach #2)">
</asp:GridView>
<br />
<asp:GridView ID="gvSortedOnLaneNameApproach3" runat="server"
Caption="Sorted on Lane Name (Approach #3)">
</asp:GridView>
<br />
<asp:GridView ID="gvSortedOnLaneNameApproach4" runat="server"
Caption="Sorted on Lane Name (Approach #4)">
</asp:GridView>
</div>
</form>
</body>
</html>
Code Behind (aspx.cs) :
using System;
using System.Collections.Generic;
using System.Linq;
namespace WebApplication1
{
public partial class Sorting : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List
persons.Add(new Person() { Name = "John", Salary = 25500, Address = "10, AB Road, Pune" });
persons.Add(new Person() { Name = "Smith", Salary = 32000, Address = "100, MG Road, Pune" });
persons.Add(new Person() { Name = "Pramod", Salary = 15500, Address = "121, JM Road, Pune" });
persons.Add(new Person() { Name = "Alok", Salary = 38000, Address = "410, SB Road, Pune" });
persons.Add(new Person() { Name = "Laxmi", Salary = 55500, Address = "50, GT Road, Pune" });
persons.Add(new Person() { Name = "Vivek", Salary = 34000, Address = "1, AN Road, Pune" });
gvOriginal.DataSource = persons;
gvOriginal.DataBind();
// Sort - One approach
persons.Sort(delegate(Person emp1, Person emp2) { return emp1.Salary.CompareTo(emp2.Salary); });
gvOriginal.DataSource = persons;
gvOriginal.DataBind();
// Sort - Other approach
persons.Sort(delegate(Person person1, Person person2)
{
string address1 = person1.Address;
string address2 = person2.Address;
string lane1 = address1.Split(',')[1];
string lane2 = address1.Split(',')[1];
return lane1.CompareTo(lane2);
});
gvSortedOnLaneNameApproach1.DataSource = persons;
gvSortedOnLaneNameApproach1.DataBind();
// Sort - other approach
persons.Sort((person1, person2) => person1.Address.Split(',')[1].CompareTo(person2.Address.Split(',')[1]));
gvSortedOnLaneNameApproach2.DataSource = persons;
gvSortedOnLaneNameApproach2.DataBind();
// Sort - other approach
gvSortedOnLaneNameApproach3.DataSource = Enumerable.OrderBy
gvSortedOnLaneNameApproach3.DataBind();
// Sort - other approach
gvSortedOnLaneNameApproach4.DataSource = persons.OrderBy
gvSortedOnLaneNameApproach4.DataBind();
}
}
}
public class Person
{
public string Name { get; set; }
public double Salary { get; set; }
public string Address { set; get; }
}
Once you are done, press F5 to view different sorting outputs.
Refer the link for output.
Thanks