私は防御的なプログラミングが好きです。私は例外スローが嫌いですが、これは私の質問の主題ではありません。
列名を使用して注文を実行できるように、linQの拡張機能を採用しました
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
防御プログラミングでは、列名が無効な場合、このメソッドは指定された列挙可能オブジェクトを返します。
次に、ThenByを使用して2次ソートを実行する必要があります。だから私はその署名が必要です:
public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
IOrderedEnumerableを返す必要があります。私の問題は、防御的なプログラミング機能を維持することです。列名が無効である場合、指定されたセットを返す必要があります。
これを行うためのクリーンな方法はありますか?私が考えているのは一種のトリックです:
- リフレクションを使用して、最初に見つかったプロパティで並べ替えます。これは、プロパティが並べ替えが許可されていない可能性があるため危険です。
- 独自のIOrderedEnumerableを実装します。これは、IQueryableまたはIListで順序付けを実行し、次に他のLinQ操作を実行するため、リスクもあります。そのため、副作用が心配です。
そしてアドバイス/提案?ありがとう