/// <summary>
        /// Throws a properly formated <see cref="BadRequestException"/> if the <see cref="ModelStateDictionary"/> isn't valid.
        ///     Does nothing when the <see cref="ModelStateDictionary"/> is valid.
        /// </summary>
        /// <param name="modelState">The <see cref="ModelStateDictionary"/> that we are validating.</param>
        public static void ThrowIfInvalid(this ModelStateDictionary modelState)
        {
            if (modelState.IsValid)
            {
                return;
            }

            var exception = new BadRequestException();

            foreach (var key in modelState.Keys)
            {
                foreach (var error in modelState[key].Errors.Where(e => !string.IsNullOrEmpty(e.ErrorMessage)))
                {
                    exception.Add(key, error.ErrorMessage);
                }

                foreach (var error in modelState[key].Errors.Where(e => e.Exception?.Message != null))
                {
                    exception.Add(key, error.Exception.Message);
                }
            }

            throw exception;
        }
        /// <summary>
        /// Throws if any of the lambda parameters fails the required <paramref name="condition"/>.
        ///     It will agreegate all errors in the same <see cref="BadRequestException"/>.
        /// </summary>
        /// <param name="condition">The condition <see cref="Func{String, Bool}"/> that is required to pass.</param>
        /// <param name="exceptionExpression">The lamdba used to add the parameter to the <see cref="BadRequestException"/>.</param>
        /// <param name="expressions">The list of lambdas with parameters.</param>
        public static void InternalAction([NotNull] Func <string, bool> condition, Expression <Action <BadRequestException, string> > exceptionExpression, params Expression <Func <string> >[] expressions)
        {
            BadRequestException exception = null;

            foreach (var expression in expressions)
            {
                if (!condition(expression.Compile().Invoke()))
                {
                    continue;
                }

                if (exception == null)
                {
                    exception = new BadRequestException();
                }

                exceptionExpression.Compile().Invoke(exception, GetMemberName(expression));
            }

            if (exception != null)
            {
                throw exception;
            }
        }