2011-07-28 6 views
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を参照しています。

答えて

0

これはおそらくもう問題にはなりません。ただし、解答はhereのように見えます。

関連する問題