2010-04-16 3 views
1

일반 클래스 HierarchicalBusinessObject가 있습니다. 클래스의 생성자에서 나는 TModel의 필드에 대한 선택자를 정의하는 람다 식을 전달합니다..NET C#은 람다 선택기로 정의 된 필드의 값을 설정합니다.

protected HierarchicalBusinessObject 
    (Expression<Func<TModel,string>> parentSelector) 

호출은 예를 들어, 다음과 같을 것이다 :

public class WorkitemBusinessObject : 
    HierarchicalBusinessObject<Workitem,WorkitemDataContext> 
{ 
    public WorkitemBusinessObject() 
     : base(w => w.SuperWorkitem, w => w.TopLevel == true) 
    { } 
} 

I 클래스 내에서 읽기 선택기를 사용할 수있게되었습니다. 예 :

sourceList.Select(_parentSelector.Compile()).Where(... 

이제 선택기를 사용하여 필드 값을 설정하는 방법을 묻습니다. 당신이 표현 < >을 통과 왜 selector.Body() ... 필드와 같은 뭔가 ...

답변

0

나는 아주 확실하지 않다. 당신은 tModel을이 문자열 >이 속성에 값 설정을 선택하고 액션 <로, 문자열 >을 Func을 <의 tModel을 전달할 수 :


protected HierarchicalBusinessObject(Action<TModel,string> parentSetter); 

public class WorkitemBusinessObject : 
    HierarchicalBusinessObject 
{ 
public WorkitemBusinessObject() 
     : base((WorkItem w, string s) => {w.Name = s;}) 
    { } 
} 

을 그리고처럼 사용


sourceList.ForEach(w => _parentSetter(w, "NewName")); 
+0

당신의 제안을 이해합니다. 감사. 하지만 두 개의 표현식을 전달해야합니다. 하나는 설정 용이고 다른 하나는 가져 오기 용입니다. 이것은 동일한 필드이기 때문에 다소 중복됩니다. 나는 단지 "this is the field"를 전달하고 setter와 getter를 일반적으로 구현하기를 희망했다. –

+0

Linq 쿼리 구축 (엔티티 프레임 워크)에 필요하기 때문에 표현식을 사용하고 있습니다. –

관련 문제