Fix Expression constant folding inside of MemberInitExpression
#5298
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.
Pull Request Template
Description
This PR fixes a bug described in #1664 where captured variables in LINQ expressions would not get expanded leading to a
{"testName": "Test"}["testName"]expression (instead of the expected"Test") in the translated SQL, leading to an error reported by Cosmos.However the problem appears to be more general as the issue seems to be that the recursion that partially evaluates expressions (so among other things resolves the captured variables and therefore effectively changes
{"testName": "Test"}["testName"]to"Test") terminates whenever it encounters a node of typeMemberInitExpression. This explains the difference in behaviour between anonymous types and a class as described in #1664, as anonymous types do not contain theMemberInitExpressionnode.This is quite surprising since at least in the way I am used to using this library, vast majority of the expressions defining the document projections have the
MemberInitExpressionas the very root of the body of theExpression<Func<T1, T2>>, meaning that in this common case no constant folding would ever happen. Is that even possible? Or what am I missing here?Type of change
Closing issues
To automatically close an issue: closes #1664