Esempio n. 1
0
        public IEnumerable <QueryToken> GetAllTokens(QueryToken parent)
        {
            var info = metas.GetOrAdd(parent, qt =>
            {
                Expression <Func <T, V> > lambda = t => ValueSelector.Evaluate(CollectionSelector.Evaluate(t).SingleOrDefaultEx() !);

                Expression e = MetadataVisitor.JustVisit(lambda, MetaExpression.FromToken(qt, typeof(T)));

                var result = new ExtensionRouteInfo();

                if (e is MetaExpression me && me.Meta is CleanMeta cm && cm.PropertyRoutes.Any())
                {
                    var cleanType = me !.Type.CleanType();

                    result.PropertyRoute   = cm.PropertyRoutes.Only();
                    result.Implementations = me.Meta.Implementations;
                    result.Format          = ColumnDescriptionFactory.GetFormat(cm.PropertyRoutes);
                    result.Unit            = ColumnDescriptionFactory.GetUnit(cm.PropertyRoutes);
                }

                return(result);
            });
Esempio n. 2
0
 public static Dictionary <string, Meta> QueryMetadata(IQueryable query)
 {
     return(MetadataVisitor.GatherMetadata(query.Expression));
 }
Esempio n. 3
0
 void IReference.Dispatch(MetadataVisitor visitor)
 {
     visitor.Visit(this);
 }
Esempio n. 4
0
        protected internal virtual ExtensionToken CreateToken(QueryToken parent)
        {
            var info = metas.GetOrAdd(parent, qt =>
            {
                Expression e = MetadataVisitor.JustVisit(Lambda, MetaExpression.FromToken(qt, SourceType));

                MetaExpression me;

                if (this.IsProjection)
                {
                    var mpe = e as MetaProjectorExpression;

                    if (mpe == null)
                    {
                        mpe = MetadataVisitor.AsProjection(e);
                    }

                    me = mpe == null ? null : mpe.Projector as MetaExpression;
                }
                else
                {
                    me = e as MetaExpression;
                }

                CleanMeta cm = me == null ? null : me.Meta as CleanMeta;

                var result = new ExtensionRouteInfo();

                if (cm != null && cm.PropertyRoutes.Any())
                {
                    var cleanType = me.Type.CleanType();

                    result.PropertyRoute   = cm.PropertyRoutes.Only();
                    result.Implementations = me.Meta.Implementations;
                    result.Format          = ColumnDescriptionFactory.GetFormat(cm.PropertyRoutes);
                    result.Unit            = ColumnDescriptionFactory.GetUnit(cm.PropertyRoutes);
                }

                result.IsAllowed = () => (me == null || me.Meta == null) ? null : me.Meta.IsAllowed();

                if (ForcePropertyRoute != null)
                {
                    result.PropertyRoute = ForcePropertyRoute;
                }

                if (ForceImplementations != null)
                {
                    result.Implementations = ForceImplementations;
                }

                if (ForceFormat != null)
                {
                    result.Format = ForceFormat;
                }

                if (ForceUnit != null)
                {
                    result.Unit = ForceUnit;
                }

                if (ForceIsAllowed != null)
                {
                    result.IsAllowed = ForceIsAllowed;
                }

                return(result);
            });

            return(new ExtensionToken(parent, Key, Type, IsProjection, info.Unit, info.Format, info.Implementations, info.IsAllowed(), info.PropertyRoute)
            {
                DisplayName = NiceName()
            });
        }
Esempio n. 5
0
 void IReference.Dispatch(MetadataVisitor visitor) => UnderlyingType.Dispatch(visitor);
Esempio n. 6
0
 public void Dispatch(MetadataVisitor visitor)
 {
     _oldTypeReference.Dispatch(visitor);
 }
Esempio n. 7
0
 public void Dispatch(MetadataVisitor visitor)
 {
     _oldParameter.Dispatch(visitor);
 }
 void IReference.Dispatch(MetadataVisitor visitor)
 {
     CheckDefinitionInvariant();
     visitor.Visit((IPropertyDefinition)this);
 }
 void IReference.Dispatch(MetadataVisitor visitor) => visitor.Visit((IFunctionPointerTypeReference)this);
Esempio n. 10
0
 public void Dispatch(MetadataVisitor visitor)
 {
     visitor.Visit(this);
 }
Esempio n. 11
0
 void IReference.Dispatch(MetadataVisitor visitor)
 {
     throw ExceptionUtilities.Unreachable;
 }