Skip to content

Conversation

@AmirEmilV
Copy link
Contributor

@AmirEmilV AmirEmilV commented Nov 16, 2025

Fixes #246

Previously, all filters were applied after projection (on the DTO level).
This worked for most cases but caused issues when:

Filters referenced computed or parameterized properties (e.g., values depending on runtime parameters).
AutoMapper’s expression mapping could not propagate runtime parameters into the EF Core query.
As a result, some filters returned empty results even when the projected values were correct.

What’s New

Added ProjectionSettings.ApplyFilterAfterProjection (default: true).
When set to false, filters are mapped and applied before projection (on the entity query).
Updated internal GetQuery logic to choose between pre- and post-projection filtering dynamically.
Added a new test (FilterByDynamicParameterValueBeforeProjectionReturnZeroResults and FilterByDynamicParameterValueAfterProjectionReturnExpectedResults) replicating real-world scenarios with parameterized filters.

Testing

All existing tests pass.
Added new coverage for dynamic parameter filtering behavior.
Verified consistent results across sync/async and different OData configurations.

@AmirEmilV
Copy link
Contributor Author

AmirEmilV commented Nov 20, 2025

@dotnet-policy-service agree
@dotnet-policy-service agree

@AmirEmilV AmirEmilV closed this Nov 21, 2025
@AmirEmilV AmirEmilV reopened this Nov 21, 2025
@BlaiseD BlaiseD merged commit 1674579 into AutoMapper:master Nov 21, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Using GetQueryAsync with filter odata query, AutoMapper doesn’t use mapping parameters (e.g., userid) when translating the filter expression

2 participants