public static PropertyInfo GetPropertyInfo()

in src/Epam.GraphQL/Extensions/ExpressionExtensions.cs [289:330]


        public static PropertyInfo GetPropertyInfo(
            this LambdaExpression propertyLambda)
        {
            MemberExpression? member;

            if (propertyLambda.Body is UnaryExpression unaryExpression && unaryExpression.NodeType == ExpressionType.Convert)
            {
                member = unaryExpression.Operand as MemberExpression;
                if (member == null)
                {
                    throw new ArgumentException($"Expression '{propertyLambda}' does not refer to a property.");
                }
            }
            else
            {
                member = propertyLambda.Body as MemberExpression;
                if (member == null)
                {
                    throw new ArgumentException($"Expression '{propertyLambda}' refers to a method, not a property.");
                }
            }

            var propInfo = member.Member as PropertyInfo;
            if (propInfo == null)
            {
                throw new ArgumentException($"Expression '{propertyLambda}' refers to a field, not a property.");
            }

            var type = propertyLambda.Parameters[0].Type;
            if (type != propInfo.ReflectedType && !propInfo.ReflectedType.IsAssignableFrom(type))
            {
                throw new ArgumentException(
                    $"Expression '{propertyLambda}' refers to a property that is not from type {type}.");
            }

            if (member.Expression is not ParameterExpression)
            {
                throw new ArgumentException($"Expression '{propertyLambda}' refers to a nested member.");
            }

            return type.GetProperty(propInfo.Name) ?? propInfo;
        }