using System; using System.Data; using System.Collections.Generic; public class CustomerComparer : IComparer { // Instance variables private string sortColumn; private bool reverse; public CustomerComparer(string sortExpression) { reverse = sortExpression.ToLowerInvariant().EndsWith(" desc"); if (reverse) { sortColumn = sortExpression.Substring(0, sortExpression.Length - 5); } else { sortColumn = sortExpression; } } public int Compare(Customer a, Customer b) { int retVal = 0; switch (sortColumn) { case "CustomerId": if (a.CustomerId > b.CustomerId) retVal = 1; else if (a.CustomerId < b.CustomerId) retVal = -1; else retVal = 0; break; case "LastName": retVal = String.Compare(a.LastName, b.LastName, StringComparison.InvariantCultureIgnoreCase); break; case "FirstName": retVal = String.Compare(a.FirstName, b.FirstName, StringComparison.InvariantCultureIgnoreCase); break; case "CreditLimit": if (a.CreditLimit > b.CreditLimit) retVal = 1; else if (a.CreditLimit < b.CreditLimit) retVal = -1; else retVal = 0; break; case "PhoneNumber": retVal = String.Compare(a.PhoneNumber, b.PhoneNumber, StringComparison.InvariantCultureIgnoreCase); break; } return (retVal * (reverse ? -1 : 1)); } }