2013-02-21 3 views
0

현재 Lambda Expressions를 사용하여 동적 select 절을 작성하고 중첩 된 컬렉션을 처리해야하는 시점에 갇혀 있습니다. 예를배열에 대한 Lambda 바인딩 식

class A 
{ 
    public string Property1 {get;set;} 
    public string Property2 {get;set;} 
    public IEnumerable<B> Property3 {get;set;} 
} 

class B 
{ 
    public string Prop1 {get;set;} 
    public int Prop2 {get;set;} 
} 

위해 나는 위와 같이 클래스 A와 B가 있고 나는 그러나 내에서이 데이터 그리드에 바인더 제본받을 예정으로, 모든 속성이 필요하지 않은 수집을 얻는다. 그 같은보기 의존. 보기는 표시 할 필드를 정의합니다. 따라서 나는 즉시 객체를 생성하고 필요한 객체를 추가합니다. 아래 그림과 같이이 난 내가 만드는 오전로 모음입니다 Property3, 그것은 작동하지 않습니다 싶어하지만 경우에, 나는 클래스 A에서만 속성 1과 Property2를 선택해야하는 경우이 작동

Expression.Bind(p, Expression.PropertyOrField(entityExpression, p.Name)) 

, 람다 식을 사용하여 수행 한 즉석에서 입력하고 필요한 속성을 추가하기 만하면됩니다. 따라서 런타임에 나는

IEnumerable<RuntimeType2> => RuntimeType2 { string Prop1 {get;set; } 
IEnumberable<RuntimeType1> => 
RuntimeType1 { string Property1 {get;set; 
IEnumerable<RuntimeType2> Property3 {get;set;} } 

과 같은 시나리오를 갖게 될 것입니다. 위의 시나리오를 달성하고 싶습니다. 간단한 경우 나는 이것을 할 수 있지만 컬렉션에 바인딩하는 데 어려움을 겪고 있습니다.

내 문제가 충분히 기술되기를 바랍니다. 더 많은 정보가 필요하시면 회신 해주십시오. 모든 포인터가 도움이 될 것입니다.

+0

정확히 무엇이 문제입니까? 왜 콜렉션 속성을 만들지 않는가? 그것은 무엇을 하는가? (예외?)? – svick

+0

예 유형이 다르다. 문제는 Expressio를 사용하여 속성 매핑을 지정할 수 없다는 것입니다. 예를 들어 위에서 RuntimeType2의 Prop1에 대한 클래스 B의 Prop1 매핑을 언급 한 것과 같습니다. – TBone

답변

2

IEnumerable<B> 유형의 값을 IEnumerable<RuntimeType2> 유형의 속성으로 푸시하려고하면 문제가 발생합니다. 중첩 된 선택 (Expression API를 사용하여 만들어야 메서드를 호출해야 함)을 사용하여 둘 사이를 변환해야합니다.