Skip to content

Commit

Permalink
update changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ElizabethOkerio committed Jul 25, 2023
1 parent e02a385 commit 0d923e2
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 2 deletions.
5 changes: 5 additions & 0 deletions src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9597,6 +9597,11 @@
Basically for $compute in $select and $expand
</summary>
</member>
<member name="P:Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.QueryProvider">
<summary>
Gets or sets the query provider.
</summary>
</member>
<member name="M:Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetParameter(System.String)">
<summary>
Gets the parameter using parameter name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,8 @@ public static IQueryable ApplyBind(this ISelectExpandBinder binder, IQueryable s
throw Error.ArgumentNull(nameof(context));
}

context.QueryProvider = source.Provider.GetType().Namespace;

Type elementType = context.ElementClrType;

LambdaExpression projectionLambda = binder.BindSelectExpand(selectExpandClause, context) as LambdaExpression;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,11 @@ public QueryBinderContext(QueryBinderContext context, ODataQuerySettings querySe
/// </summary>
public Expression Source { get;set; }

/// <summary>
/// Gets or sets the query provider.
/// </summary>
internal string QueryProvider { get; set; }

/// <summary>
/// Gets the parameter using parameter name.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ internal SelectExpandBinder()
/// </summary>
public IOrderByBinder OrderByBinder { get; }

internal string QueryProvider { get; set; }

/// <summary>
/// Translate an OData $select or $expand tree represented by <see cref="SelectExpandClause"/> to an <see cref="Expression"/>.
/// </summary>
Expand All @@ -81,6 +83,8 @@ public virtual Expression BindSelectExpand(SelectExpandClause selectExpandClause
IEdmNavigationSource navigationSource = context.NavigationSource;
ParameterExpression source = context.CurrentParameter;

QueryProvider = context.QueryProvider;

// expression looks like -> new Wrapper { Instance = source , Properties = "...", Container = new PropertyContainer { ... } }
Expression projectionExpression = ProjectElement(context, source, selectExpandClause, structuredType, navigationSource);

Expand Down Expand Up @@ -370,11 +374,23 @@ internal Expression ProjectElement(QueryBinderContext context, Expression source
bool isSelectedAll = IsSelectAll(selectExpandClause);
if (isSelectedAll)
{
Expression updatedExpression = UpdateMemberInitExpression(source, structuredType);
Expression sourceExpression = null;

if (QueryProvider != null &&
QueryProvider == HandleNullPropagationOptionHelper.EntityFrameworkQueryProviderNamespace ||
QueryProvider == HandleNullPropagationOptionHelper.ObjectContextQueryProviderNamespaceEF5 ||
QueryProvider == HandleNullPropagationOptionHelper.ObjectContextQueryProviderNamespaceEFCore2)
{
sourceExpression = UpdateMemberInitExpression(source, structuredType);
}
else
{
sourceExpression = source;
}

// Initialize property 'Instance' on the wrapper class
wrapperProperty = wrapperType.GetProperty("Instance");
wrapperTypeMemberAssignments.Add(Expression.Bind(wrapperProperty, updatedExpression));
wrapperTypeMemberAssignments.Add(Expression.Bind(wrapperProperty, sourceExpression));

wrapperProperty = wrapperType.GetProperty("UseInstanceForProperties");
wrapperTypeMemberAssignments.Add(Expression.Bind(wrapperProperty, Expression.Constant(true)));
Expand Down

0 comments on commit 0d923e2

Please sign in to comment.