Карта - это функция, которая (помимо прочего через перегрузки) принимает Expression<Func<T>>
- т.е. она выглядит как Func<T>
, но Expression<Func<T>>
преобразуется в дерево выражений, а не только в лямбду.
Деревья выражений - это, по сути, AST, и вы можете написать код для обхода дерева выражений, чтобы извлечь строку с именем свойства, что позволит вам отражать «нормально» с этого момента.
Есть много материалов, где люди пишут вещи, которые отражаются на деревьях выражений. Прочтите этот пост , например, для демонстрации того, как написать пару утилитарных методов, чтобы облегчить отражение.