The requirement described in the question calls for a flexible way to query records based on user-selected fields. Dynamic SOQL is the perfect tool for this job as it allows the construction of a SOQL string at runtime, which can include any number of fields and filter conditions that are determined at the time the user interacts with the page. This enables the creation of a highly customizable query interface. A, B, and C are not suitable for this requirement as they serve different purposes: A (Streaming API) is for receiving real-time streams of data changes, B (Metadata API) is for managing the metadata of your Salesforce org, and C (variable binding) is used in Visualforce to bind data between the page and the controller but does not provide dynamic query capabilities. References Dynamic SOQL: Dynamic SOQL in Apex Developer Guide