[release/8.0] Fix Contains within SQL Server aggregate functions #32543
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #32374, backports #32478
Description
The new EF 8.0 primitive collections support translates the parameterized Contains LINQ query to an OPENJSON-based subquery (
WHERE x IN (SELECT ... FROM OPENJSON(@p))), instead of the older IN+constants construct (WHERE x IN (1, 2, 3)). Unfortunately, SQL Server doesn't support any subqueries in arguments to aggregate functions (e.g.SELECT COUNT(<something containing a subquery>). This limitation doesn't exist in any other database.Customer impact
Any query requiring a parameterized Contains within an aggregate function now fail on SQL Server; such queries worked before.
How found
Customers reported on 8.0
Regression
Yes
Testing
Added
Risk
Low risk, very targeted change for SQL Server Contains only. Also added quirk.