using System.Linq.Expressions;
public static void Main()
Console.WriteLine(GetPropertyName<Foo>(x => x.Id));
Console.WriteLine(GetPropertyName<Foo>(x => x.Id.ToString()));
private static string GetPropertyName<T>(Expression<Func<T, object>> expression)
if (expression.Body is MemberExpression memberExpression)
return memberExpression.Member.Name;
if(expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression memberExpression2)
return memberExpression2.Member.Name;
throw new NotSupportedException($"Not supported case, fix me and add it to the unit test as supported case if its legit for EFC mapping, expression='{expression.ToString()}', compiled expression='{expression.Compile().ToString()}'");
public int Id { get; set; }
public string InternalId { get; set; }
public string CatId { get; set; }
public DateTimeOffset? DueDate { get; set; }