1
私は(これは仕様オブジェクトにラップされた)Dynamic Linqに基づいて、クライアントによって提供された文字列から述語を行う方法を考え出し:動的表現API:述語を行うことができます。どのようにOrderBy仕様をコード化できますか?
彼らの助けで説明したように、フィルタは、式言語の文字列であるreturn System.Linq.Dynamic.DynamicExpression.ParseLambda<TE, bool>
(filter.ToString(), arguments.ToArray())
ファイル。魅力のように動作します。
Expression<Func<E, object>> orderby
注:
がここにフィルタリングするために私のリポジトリ方法だと注文項目
をしかし、強く型付けされたこのような表現にORDERBYフィールドの文字列リストを翻訳することが可能です
public IList<E> Get(Expression<Func<E, bool>> filterLambda = null, Expression<Func<E, object>> orderbyLambda = null, int? page = null, int? pageSize = null)
私はそれを使用して呼び出す:
var a = Repo.Get(filterLambda: Specification.Where( StringListOfFilters),
orderbyLambda: Specification.OrderBy(StringListOfOrderBy),
page: 1,
pageSize: 100);
OrderByフィールドの文字列リストを強く型付けされたラムダ式に変換する方法については、文字列の例は次のようになります。
fieldname
fieldname descending
別のノート:
私はfieldname op value
の注入を防止するために正規表現でそれらを検証しているクライアントからの文字列を、翻訳しています。また、私はリポジトリではなく仕様オブジェクトのDynamic Linqを参照しています。