我喜欢防御性编程。我讨厌抛出异常,但这不是我的问题。
我对 linQ 进行了扩展,以便能够使用列名执行订单
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
对于防御性编程,如果列名无效,此方法将返回给定的枚举。
现在我需要使用 ThenBy进行二次排序。所以我需要那个签名:
public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
我需要返回一个 IOrderedEnumerable。我的问题是保持我的防御性编程功能:我必须返回给定的集合是无效的列名。
有没有一种干净的方法来做到这一点?我所想的只是一些技巧:
- 使用反射按第一个找到的属性排序,这是有风险的,因为该属性可能不允许排序
- 实现我自己的 IOrderedEnumerable,这也是有风险的,因为我在 IQueryable 或 IList 上执行排序,然后我执行其他 LinQ 操作,所以我担心副作用。
和建议/建议?谢谢