Byłoby bardzo proste, jeśli są w stanie ustalić poprzez wyrażenie lambda (poniżej)Jak przypisać wartość przez wyrażenie?
//An expression tree cannot contain an assignment operator
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName = "Tim";
powyżej Ten kod jest nieważny w wyniku przypisania operatora. Muszę przekazać wyrażenie lambda w celu zidentyfikowania właściwości w złożonym obiekcie, który należy ustawić. W niektórych przypadkach obiekt złożony ma listę, a zatem zduplikowane typy obiektów i nazwy, dlatego potrzebuję lambda do jawnego odniesienia się do pola w obiekcie, który ma zostać zaktualizowany.
Jestem w stanie odzyskać wartość za pomocą następujących, nie ma problemu. Ale nie jestem pewien, jak użyć tej samej logiki, aby ustawić wartość, natknąłem się na Expression.Assign i wierzę, że to może być rozwiązanie.
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName;
var result = FindByProperty(expression);
public static string FindByProperty(Expression<Func<Contract, object>> propertyRefExpr)
{
ComplexObj obj = new ComplexObj();
Contact myContact = new Contact();
myContact.FirstName = "Allen";
obj.Contacts = new List<Contact>{myContact};
return propertyRefExpr.Compile().Invoke(obj);
}
Aktualizacja:
"przechodząc przypisanie własności sposobu jak drzewa wyrażenie ..."
stosując metodę UstawWartość z ParentTypeA, wartość nie będzie działać. (Kod poniżej)
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName;
obj.AssignNewValue(expression, firstName);
public static void AssignNewValue(this ComplexObj obj, Expression<Func<ComplexObj, object>> expression, object value)
{
var propertyInfo = (PropertyInfo)((MemberExpression)expression.Body).Member;
propertyInfo.SetValue(obj, value, null);
}
http://stackoverflow.com/questions/5780232/assign-property-with-an-expressiontree –
to wygląda obiecująco Stana, dzięki – AnxiousdeV