You could write your own comparer implementing IComparer
]. Here is an example: http://www.atlanticbt.com/blog/sorting-with-linq-to-objects/
Just code all your cases in the comparer, and pass the parameters to be used (property name, order) in the constructor. You can use basic reflection to access properties based on their name. But I am not sure, that you will gain much - but clearer code at least.