/// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            Check.NotNull(memberExpression, nameof(memberExpression));

            return(TryBindMember(memberExpression.Expression, MemberIdentity.Create(memberExpression.Member), out var result)
                ? result
                : TranslationFailed(memberExpression.Expression, Visit(memberExpression.Expression), out var sqlInnerExpression)
                    ? null
                    : _memberTranslatorProvider.Translate(sqlInnerExpression, memberExpression.Member, memberExpression.Type));
        }
示例#2
0
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var innerExpression = Visit(memberExpression.Expression);

            if (TryBindProperty(innerExpression, MemberIdentity.Create(memberExpression.Member), out var result))
            {
                return(result);
            }

            return(TranslationFailed(memberExpression.Expression, innerExpression)
                ? null
                : _memberTranslatorProvider.Translate((SqlExpression)innerExpression, memberExpression.Member, memberExpression.Type));
        }
示例#3
0
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var innerExpression = Visit(memberExpression.Expression);

            if (innerExpression is EntityShaperExpression entityShaper)
            {
                return(BindProperty(entityShaper, entityShaper.EntityType.FindProperty(memberExpression.Member.GetSimpleMemberName())));
            }

            return(TranslationFailed(memberExpression.Expression, innerExpression)
                ? null
                : _memberTranslatorProvider.Translate((SqlExpression)innerExpression, memberExpression.Member, memberExpression.Type));
        }
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var boundProperty = BindProperty(memberExpression.Expression, memberExpression.Member.GetSimpleMemberName());

            if (boundProperty != null)
            {
                return(boundProperty);
            }

            var innerExpression = Visit(memberExpression.Expression);

            return(TranslationFailed(memberExpression.Expression, innerExpression)
                ? null
                : _memberTranslatorProvider.Translate((SqlExpression)innerExpression, memberExpression.Member, memberExpression.Type));
        }
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var innerExpression = Visit(memberExpression.Expression);

            if (innerExpression is EntityProjectionExpression ||
                (innerExpression is UnaryExpression innerUnaryExpression &&
                 innerUnaryExpression.NodeType == ExpressionType.Convert &&
                 innerUnaryExpression.Operand is EntityProjectionExpression))
            {
                return(BindProperty(innerExpression, memberExpression.Member.GetSimpleMemberName()));
            }

            return(TranslationFailed(memberExpression.Expression, innerExpression)
                ? null
                : _memberTranslatorProvider.Translate((SqlExpression)innerExpression, memberExpression.Member, memberExpression.Type));
        }
示例#6
0
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var innerExpression = Visit(memberExpression.Expression);

            if ((innerExpression is EntityProjectionExpression ||
                 (innerExpression is UnaryExpression innerUnaryExpression &&
                  innerUnaryExpression.NodeType == ExpressionType.Convert &&
                  innerUnaryExpression.Operand is EntityProjectionExpression)) &&
                TryBindMember(innerExpression, MemberIdentity.Create(memberExpression.Member), out var result))
            {
                return(result);
            }

            return(TranslationFailed(memberExpression.Expression, innerExpression)
                ? null
                : _memberTranslatorProvider.Translate((SqlExpression)innerExpression, memberExpression.Member, memberExpression.Type));
        }
 /// <summary>
 ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
 ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
 ///     any release. You should only use it directly in your code with extreme caution and knowing that
 ///     doing so can result in application failures when updating to a new Entity Framework Core release.
 /// </summary>
 protected override Expression VisitMember(MemberExpression memberExpression)
 => TryBindMember(memberExpression.Expression, MemberIdentity.Create(memberExpression.Member), out var result)
         ? result
         : TranslationFailed(memberExpression.Expression, Visit(memberExpression.Expression), out var sqlInnerExpression)
             ? null
             : _memberTranslatorProvider.Translate(sqlInnerExpression, memberExpression.Member, memberExpression.Type);