Restore WithProjection(LambdaExpression) and add nav isNull - #1407
Merged
Conversation
Two gaps that 35.0.0 left, both found while upgrading a downstream API.
WithProjection only took Expression<Func<TSource, TProjection>>, so a
projection built by reflection or Expression.Lambda had no route in:
IncludeAppender is internal, so its public SetProjectionMetadata is
unreachable. Adds the LambdaExpression overload back alongside the
generic one. Overload resolution prefers the generic for lambdas and for
the old cast form, so no existing call site changes meaning, and both
share the identity-projection check.
A reference navigation could not be tested for null. v34's string path
said {path: "nav", comparison: equal}, and WhereExpression still builds
that predicate, but the generated nested where has no comparison of its
own, and {nav: {id: {equal: null}}} unboxed null into a non nullable
Guid rather than emitting IS NULL. WhereGraph<T> gains isNull, Prefix
resolves the navigation-only path, and TypeConverter treats null as a
comparison a reference typed member can take. isNull at the root of a
where has no navigation to bind to and reports that.
Version 35.1.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Two gaps that 35.0.0 left, both found while upgrading a downstream API.
WithProjection only took Expression<Func<TSource, TProjection>>, so a projection built by reflection or Expression.Lambda had no route in: IncludeAppender is internal, so its public SetProjectionMetadata is unreachable. Adds the LambdaExpression overload back alongside the generic one. Overload resolution prefers the generic for lambdas and for the old cast form, so no existing call site changes meaning, and both share the identity-projection check.
A reference navigation could not be tested for null. v34's string path said {path: "nav", comparison: equal}, and WhereExpression still builds that predicate, but the generated nested where has no comparison of its own, and {nav: {id: {equal: null}}} unboxed null into a non nullable Guid rather than emitting IS NULL. WhereGraph gains isNull, Prefix resolves the navigation-only path, and TypeConverter treats null as a comparison a reference typed member can take. isNull at the root of a where has no navigation to bind to and reports that.
Version 35.1.0.