2011-07-28 3 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있는 클라이언트에서 오는 문자열을 번역하고있다. 또한 필자는 저장소가 아닌 Specification 객체에서 Dynamic Linq만을 참조하려고합니다.

답변

0

이것은 아마도 더 이상 문제가되지 않습니다. 그러나 해결책은 here처럼 보입니다.