Подскажите аналог nameof, чтобы отобразить не только атрибут, но и его вхождения

В своем приложении я часто использую nameof оператор для работы с базой данных через ORM. К примеру, использую nameof(Employee.Id) и вывожу Id соответственно (конечно, мы можем прописывать атрибут через кавычки, но не всегда удается таким образом отследить изменения объекта).

Но появилась необходимость в том, чтобы отобразить не только атрибут, но и вхождения, к примеру, какой-нибудь_оператор(Employee.Job.Country.Id) и появился Job.Country.Id, можете подсказать как это сделать?

Условно, я хочу чтобы второй nameof(Test.Count.Id) вернул мне Count.Id

var esqTest = new EntitySchemaQuery(userConnection.EntitySchemaManager, nameof(Test));
esqTest.AddAllSchemaColumns();

esqTest.Filters.Add(esqTest.CreateFilterWithParameters(FilterComparisonType.Equal, nameof(Test), selectedRow));
esqTest.Filters.Add(esqTest.CreateFilterWithParameters(FilterComparisonType.Equal, nameof(Test.Count.Id), 2));

введите сюда описание изображения


Ответы (1 шт):

Автор решения: tym32167

хз то или не то, но вот есть такой фокус.

Например, у нас класс

public class Foo
{
    public string Id{get;set;}
}

Напишем простой Extension метод

public static class Ext
{
    public static string PropsPath<T, K>(this T obj, Expression<Func<T, K>> exp)
    {
        return exp.Body.ToString();
    }       
}

Как можно вызвать

Foo myObject = new Foo();;
var ret = myObject.PropsPath(x=>x.Id);
Console.WriteLine(ret);

на выходе будет

x.Id

Имейте ввиду, что этот код не сильно эффективный, так что я бы не стал в каких то критических по производительности местах его использовать.

→ Ссылка