2010-04-16 1 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) 
    { } 
} 

Я могу использовать селектор для чтения в классе. Например:

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

Теперь я спрашиваю себя, как использовать селектор для установки значения в поле. Что-то вроде selector.Body() .... Field ...

ответ

0

Я не совсем уверен, почему вы передаете Expression < >. Вы можете просто передать Func < TModel, строку > в качестве селектора и действий < 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

Я понимаю ваше предложение. Благодарю. Но тогда я должен передать два выражения: один для настройки и второй для получения. Это несколько избыточно, поскольку это одно и то же поле. Я надеялся передать только «это поле» и реализовать сеттер и геттер в целом. –

+0

Кстати, я использую выражения, потому что мне нужны они для построения запроса Linq (сущность framework). –

Смежные вопросы