Я сделал этот метод расширения (я знаю, что сейчас нет проверки исключений и т. Д., Он будет добавлен, как только я уверен, что функция на самом деле правильная):
public static IEnumerable<TSource> ChangeProperty<TSource, TResult>(this IEnumerable<TSource> source,Expression<Func<TSource,TResult>> res, Func<TSource, TResult> changeProp)
{
Type type = typeof(TSource);
MemberExpression member = res.Body as MemberExpression;
var name = member.Member.Name;
foreach (var x in source)
{
var prop = type.GetProperty(name);
prop.SetValue(x, changeProp(x));
Console.WriteLine(prop.GetValue(x));
}
return source;
}
И используется в этомконтекст (удаление ненужных тегов убирает теги html из строки):
_dc.EmailTemplates
.ChangeProperty(x=>x.Body,z=>RemoveUnwantedTags(z.Body))
.ToList();
Но мне не нравится, что мне нужно использовать двойную лямбду, одну для получения имени свойства, а затем одну для выполненияфункция. Я не знаю, является ли это моим непониманием того, как работает Expression <>, или я упускаю что-то действительно очевидное, но буду очень признателен за помощь!