コード例 #1
0
        private Expression?LiteToString(LiteReferenceExpression lite, Expression typeId)
        {
            if (lite.CustomToStr != null)
            {
                return(Visit(lite.CustomToStr));
            }

            if (lite.Reference is ImplementedByAllExpression)
            {
                return(null);
            }

            if (lite.LazyToStr)
            {
                return(null);
            }

            if (IsCacheable(typeId))
            {
                return(null);
            }

            if (lite.Reference is EntityExpression entityExp)
            {
                if (entityExp.AvoidExpandOnRetrieving)
                {
                    return(null);
                }

                return(binder.BindMethodCall(Expression.Call(entityExp, EntityExpression.ToStringMethod)));
            }

            if (lite.Reference is ImplementedByExpression ibe)
            {
                if (ibe.Implementations.Any(imp => imp.Value.AvoidExpandOnRetrieving))
                {
                    return(null);
                }

                return(ibe.Implementations.Values.Select(ee =>
                                                         new When(SmartEqualizer.NotEqualNullable(ee.ExternalId, QueryBinder.NullId(ee.ExternalId.ValueType)),
                                                                  binder.BindMethodCall(Expression.Call(ee, EntityExpression.ToStringMethod)))
                                                         ).ToCondition(typeof(string)));
            }

            return(binder.BindMethodCall(Expression.Call(lite.Reference, EntityExpression.ToStringMethod)));
        }