private static OeOperationParameterConfiguration[] GetParameters(MethodInfo methodInfo)
        {
            ParameterInfo[] parameterInfos = methodInfo.GetParameters();
            var             parameters     = new OeOperationParameterConfiguration[parameterInfos.Length];

            for (int i = 0; i < parameterInfos.Length; i++)
            {
                parameters[i] = new OeOperationParameterConfiguration(parameterInfos[i].Name, parameterInfos[i].ParameterType);
            }
            return(parameters);
        }
        private static OeOperationParameterConfiguration[] GetBoundParameters(MethodInfo methodInfo, bool isCollection)
        {
            ParameterInfo[] parameterInfos     = methodInfo.GetParameters();
            Type            boundParameterType = parameterInfos[0].ParameterType;

            if (!(boundParameterType.IsGenericType && typeof(Db.OeBoundFunctionParameter).IsAssignableFrom(boundParameterType)))
            {
                throw new InvalidOperationException("First parameter in bound function must be OeBoundFunctionParameter<,>");
            }

            var parameters = new OeOperationParameterConfiguration[parameterInfos.Length];

            Type entityType    = boundParameterType.GetGenericArguments()[0];
            Type parameterType = isCollection ? typeof(IEnumerable <>).MakeGenericType(entityType) : entityType;

            parameters[0] = new OeOperationParameterConfiguration(parameterInfos[0].Name, parameterType);
            for (int i = 1; i < parameterInfos.Length; i++)
            {
                parameters[i] = new OeOperationParameterConfiguration(parameterInfos[i].Name, parameterInfos[i].ParameterType);
            }

            return(parameters);
        }