저는 현재 ASP Dynamic Data로 처음으로 작업 중이며 필터를 작성하려고합니다. 사용자는 항목이 선택한 상위 항목의 하위 항목인지 여부에 따라 목록의 항목을 찾아야합니다 (항목에 둘 이상의 상위 항목이있을 수 있음).IEnumerable <int>을 빌드하는 방법 .Contains() Expression?
해당 항목은 세그먼트이며 각 세그먼트에는 Segment의 모든 상위 ID를 모아 놓은 IEnumerable 유형의 RouteIds라는 속성이 있습니다.
내 필터에 GetQueryable 메서드를 재정이 점에 오긴했는데,하지만 난 표시된 마지막 줄에 던져 예외를 점점 계속 :
ConstantExpression ce = Expression.Constant(int.Parse(this.ddlRouteNames.SelectedValue));
ParameterExpression pe = Expression.Parameter(source.ElementType);
MemberExpression me = Expression.Property(pe, this.Column.Name);
var callExpression = Expression.Call(typeof(Enumerable), "Contains", new Type[] { me.Type }, ce, me);
생각은 사용자가 적절한 경로를 선택할 것입니다 DropDownList에서 세그먼트의 RouteIds 속성에 해당 경로의 ID가 포함되어 있는지 확인합니다.
이 방법을 얻으려면 어떻게해야합니까? 'System.Linq.Enumerable'는 공급 형태 인수 및 인수와 호환 입니다
없음 일반적인 방법은 '포함되어 있지 않습니다'유형에 대한 -
편집 다음은 예외입니다. 메소드가 제네릭이 아닌 경우 인수 유형을 으로 제공해야합니다. 코드에서 두 가지 문제가 있습니다
:
그러나 당신의 표현의 모든 부분이 어쩌면, 실제로 같은 동적없는 것 같다 너무 일하는 것이 다음 아마도이 질문을 완전히 잘못 읽었을 것입니다. 그러나 LINQ 쿼리를 사용하면이 질문을 더 간단하게 처리 할 수 있습니까? http://www.rapidprogramming.com/tutorial/C-Sharp-LINQ-Query-Expressions-375 – bUKaneer
@bUKaneer, SQL 변환 가능한 LINQ 쿼리는 표현식 트리를 사용해야합니다. 때로는 컴파일러에서 해당 레그 워크를 수행하도록 할 수 있습니다. 다른 경우 (예 : OP의 예 :'this.Column.Name'처럼 런타임에 심볼 만 알면) 위와 같이 어려운 방법으로 표현식 트리를 만들어야합니다. –
@SonnyBoy, 당신은 "계속 예외를 던지라고 말합니다."그러나 당신은 예외가 던져진 것을 우리에게 말하지 않습니다. –