Hi,
I'm fond of defensive programming. I hate exception throwing, but this is not the subject of my question.
I adapted an extension to linQ to be able to perform an order by with a column name
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
With defensive programming, this method returns the given enumerable if the column name is not valid.
Now I need to perform a secondary sorting with ThenBy. So I need that signature :
public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
I need to return a IOrderedEnumerable. My problem is to keep my defensive programming feature : I must return the given set is the column name is invalid.
Is there a clean way to do this ? All I'm thinking of are kind of tricks :
- Use reflection to order by the first found property, which is risky because the property may not be sorting-allowed
- Implement my own IOrderedEnumerable, which is risky too because I perform ordering on IQueryable or IList, then I perform other LinQ operations, so I fear side effects.
And advice / suggestion ? Thanks