Даны следующие типы:
class Parent { List<Child> Children {get;set;}}
class Child {List<Child> GrandChildren {get;set;}}
class Helper<TEntity> {List<string> Properties {get;set;}}
И с учетом следующих методов на помощнике ...
public Helper AddProps<TEntity, TProp>(Expression<Func<TEntity, TProp>> exp)
{
this.Properties.Add(GetPropInfo(exp).Name);
}
public PropertyInfo GetPropInfo(Expression<Func<TEntity, TProp>> exp)
{
return (PropertyInfo)((MemberExpression)(expression.Body)).Member;
}
Я могу сделать это:
Helper<Parent> myHelper = new Helper<Parent>();
myHelper.AddProps(x => x.Children);
Список строк «Свойства» в myHelper будет содержать значение «Дети», то есть имя свойства, переданное через выражение.
То, что я хочу сейчас сделать, - это добиться того же, только с помощью способности отражать иерархию типов.
Будет ли это выглядеть так?
x => x.Children { xx => xx.GrandChildren }
Или это вообще возможно, и в чем дело? Я уже видел вложенные лямбды, но не знаю, что с ними связано.
Заранее спасибо!
EDIT
Кажется, есть некоторая путаница, поэтому я попытаюсь уточнить. Я хочу иметь возможность создать строку, которая выглядит как этот «Object.SubObject.SubSubObject», используя лямбда-выражения и цепочки методов. Мой пример делает это, но только для одного уровня (свойство класса). То, что я хочу сделать, это расширить это, чтобы перейти на любую глубину.
Например, я хотел бы использовать лямбда-выражения с плавным интерфейсом, который бы выглядел примерно так ...
AddProps (x => x.Children) .AddProps (xx => xx.GrandChildren) и это добавит «Children.GrandChildren» в мой список строк «Свойства».