using System.Linq.Expressions; namespace ApplicationHub.Domain.Contracts.Linq; public class EntityExpressionConverter : ExpressionVisitor { private readonly ParameterExpression _entityParameter; private readonly ParameterExpression _modelParameter; public EntityExpressionConverter(ParameterExpression modelParameter) { _modelParameter = modelParameter; _entityParameter = Expression.Parameter(typeof(TEntity), "entity"); } public Expression> Convert(Expression> expression) { var body = Visit(expression.Body); return Expression.Lambda>(body, _entityParameter); } protected override Expression VisitParameter(ParameterExpression node) { return node == _modelParameter ? _entityParameter : base.VisitParameter(node); } protected override Expression VisitMember(MemberExpression node) { if (node.Expression == _modelParameter) { return Expression.Property(_entityParameter, node.Member.Name); } return base.VisitMember(node); } }