Start here. This is the direct spoken answer to practice first.
Why this question matters
Explain dynamic filters and SQL injection risk with practical .NET data-access examples and production trade-offs. It matters in real backend work because the server has to enforce trust boundaries even when the UI, client, or caller behaves unexpectedly. The practical angle is dynamic filters and SQL injection risk, EF Core/SQL behavior, API boundaries, production risks, and practical debugging or design judgment, tied to a concrete production decision.
I avoid SQL injection by never treating client input as SQL. Values should be parameterized, and dynamic fields like sort columns should come from a whitelist of allowed fields. For filters, I prefer composing LINQ expressions or predefined query options. If raw SQL is needed, user values still go through parameters.