private bool TryBindProperty(Expression source, MemberIdentity member, out SqlExpression expression) { if (source is EntityShaperExpression entityShaperExpression) { var projectionBindingExpression = (ProjectionBindingExpression)entityShaperExpression.ValueBufferExpression; var selectExpression = ((SelectExpression)projectionBindingExpression.QueryExpression); var entityType = entityShaperExpression.EntityType; var property = member.MemberInfo != null ? entityType.FindProperty(member.MemberInfo) : entityType.FindProperty(member.Name); if (property != null) { expression = selectExpression.BindProperty(property, projectionBindingExpression); return(true); } var navigation = member.MemberInfo != null ? entityType.FindNavigation(member.MemberInfo) : entityType.FindNavigation(member.Name); expression = selectExpression.BindNavigation(navigation, projectionBindingExpression); return(true); } else if (source is ObjectAccessExpression objectAccessExpression) { var entityType = objectAccessExpression.Navigation.GetTargetType(); var property = member.MemberInfo != null ? entityType.FindProperty(member.MemberInfo) : entityType.FindProperty(member.Name); if (property != null) { expression = new KeyAccessExpression(property, objectAccessExpression); return(true); } var navigation = member.MemberInfo != null ? entityType.FindNavigation(member.MemberInfo) : entityType.FindNavigation(member.Name); expression = new ObjectAccessExpression(navigation, objectAccessExpression); return(true); } expression = null; return(false); }
public KeyAccessExpression GetProperty(IProperty property) { if (!_entityType.GetTypesInHierarchy().Contains(property.DeclaringEntityType)) { throw new InvalidOperationException( $"Called EntityProjectionExpression.GetProperty() with incorrect IProperty. EntityType:{_entityType.DisplayName()}, Property:{property.Name}"); } if (!_propertyExpressionsCache.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsCache[property] = expression; } return(expression); }
private bool TryBindProperty(Expression source, MemberIdentity member, out SqlExpression expression) { if (source is EntityProjectionExpression entityProjectionExpression) { var entityType = entityProjectionExpression.EntityType; var property = member.MemberInfo != null ? entityType.FindProperty(member.MemberInfo) : entityType.FindProperty(member.Name); if (property != null) { expression = entityProjectionExpression.BindProperty(property); return(true); } var navigation = member.MemberInfo != null ? entityType.FindNavigation(member.MemberInfo) : entityType.FindNavigation(member.Name); expression = entityProjectionExpression.BindNavigation(navigation); return(true); } else if (source is ObjectAccessExpression objectAccessExpression) { var entityType = objectAccessExpression.Navigation.GetTargetType(); var property = member.MemberInfo != null ? entityType.FindProperty(member.MemberInfo) : entityType.FindProperty(member.Name); if (property != null) { expression = new KeyAccessExpression(property, objectAccessExpression); return(true); } var navigation = member.MemberInfo != null ? entityType.FindNavigation(member.MemberInfo) : entityType.FindNavigation(member.Name); expression = new ObjectAccessExpression(navigation, objectAccessExpression); return(true); } expression = null; return(false); }
public SqlExpression BindProperty(IProperty property) { if (!EntityType.IsAssignableFrom(property.DeclaringEntityType) && !property.DeclaringEntityType.IsAssignableFrom(EntityType)) { throw new InvalidOperationException( $"Called EntityProjectionExpression.GetProperty() with incorrect IProperty. EntityType:{EntityType.DisplayName()}, Property:{property.Name}"); } if (!_propertyExpressionsCache.TryGetValue(property, out var expression)) { expression = new KeyAccessExpression(property, AccessExpression); _propertyExpressionsCache[property] = expression; } return(expression); }
protected abstract Expression VisitKeyAccess(KeyAccessExpression keyAccessExpression);
protected override Expression VisitKeyAccess(KeyAccessExpression keyAccessExpression) { _sqlBuilder.Append(keyAccessExpression); return(keyAccessExpression); }