Sort objects in List by properties on the object
You could use linq extensions (leaving the original list unsorted):
var sorted = theList.OrderBy(o => o.code1).ThenBy(o => o.code2);
To replace the original list with a sorted one, make a slight amendment (not very efficient, it creates a new list):
theList = theList.OrderBy(o => o.code1).ThenBy(o => o.code2).ToList();
This assumes that your list is of the correct type, something like:
List<MyClass> theList = new List<MyClass>();
And not a list of objects, in which case you would need to make use of .Cast<>()
or .OfType<>()
.
Note that Adam Houldsworth's answer with the .ToList()
call needlessly creates a new list. If your list is large, this may create unacceptable memory pressure. It would most likely be better to sort the list in place by providing a custom comparison function:
theList.Sort((a, b) =>
{
var firstCompare = a.code1.CompareTo(b.code1);
return firstCompare != 0 ? firstCompare : a.code2.CompareTo(b.code2);
});
Alternatively, if this ordering is an intrinsic property of your type, you could implement IComparable<T>
on your type, and just call
theList.Sort();
... which will use the IComparable<T>.CompareTo()
implementation.