I have a problem using Linq to order a structure like this :
public class Person
{
public int ID { get; set; }
public List Attribu
I know this is an old post, but I thought I'd post a comparer I found a while ago in case anyone else needs it.
public class GenericComparer : IComparer
{
public string SortExpression { get; set; }
public int SortDirection { get; set; } // 0:Ascending, 1:Descending
public GenericComparer(string sortExpression, int sortDirection)
{
this.SortExpression = sortExpression;
this.SortDirection = sortDirection;
}
public GenericComparer() { }
#region IComparer Members
public int Compare(T x, T y)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(SortExpression);
IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
if (SortDirection == 0)
{
return obj1.CompareTo(obj2);
}
else return obj2.CompareTo(obj1);
}
#endregion
}
Usage
List objectList = GetObjects(); /* from your repository or whatever */
objectList.Sort(new GenericComparer("ObjectPropertyName", (int)SortDirection.Descending));
dropdown.DataSource = objectList;
dropdown.DataBind();
You could overload the constructor to accept the SortDirection enum. I didn't do this because the class is in a library without a reference to System.Web.