コード例 #1
0
        public static IProjectionAttribute ValList(this IProjection projection, Func <IProjectionAttribute, IProjectionAttribute> itemFactory)
        {
            if (projection.Data == null)
            {
                throw ProjectionException.ValueNotFound(projection.Metadata);
            }

            IProjectionMetadata itemMetadata = projection.Metadata?.Item ?? projection.Metadata;

            using ProjectionReader reader = new ProjectionReader(projection.Data.Source, new[] { itemMetadata });

            IProjectionAttribute attribute = new ProjectionAttribute(projection.Identity, projection.Context, itemMetadata, data: null);

            if (reader.Read())
            {
                IProjectionData data = reader.GetData().First();

                attribute = itemFactory(attribute.With(data: data));
            }

            while (reader.Read())
            {
                IProjectionData data = reader.GetData().First();

                attribute = attribute.Append(", ");
                attribute = itemFactory(attribute.With(data: data));
            }

            return(attribute);
        }
コード例 #2
0
        public IProjectionAttribute With(IProjectionMetadata metadata = null, IProjectionData data = null, ISqlContent content = null)
        {
            IProjectionMetadata newMetadata = metadata ?? this.Metadata;
            IProjectionData     newData     = data ?? (metadata != newMetadata ? ProjectionData.Resolve(this.Data, newMetadata) : this.Data);
            ISqlContent         newContent  = content ?? this.Content;

            return(new ProjectionAttribute(this, newMetadata, newData, newContent));
        }
コード例 #3
0
        public IProjection With(IProjectionMetadata metadata = null,
                                IProjectionData data         = null,
                                IEnumerable <IProjectionAttribute> header = null,
                                IProjectionOptions options = null)
        {
            IProjectionMetadata newMetadata = metadata ?? this.Metadata;
            IProjectionData     newData     = data ?? this.Data;

            IEnumerable <IProjectionAttribute> newHeader = header ?? (newMetadata != this.Metadata ? this.CreateDefaultHeader(newMetadata) : this.Header);
            IProjectionOptions newOptions = options ?? this.Options;

            return(new Projection(this, newMetadata, newData, newHeader, newOptions));
        }
コード例 #4
0
        protected Projection(IProjection projection, IProjectionMetadata metadata, IProjectionData data, IEnumerable <IProjectionAttribute> header, IProjectionOptions options)
        {
            if (projection == null)
            {
                throw ProjectionException.ArgumentNull(nameof(projection), metadata: null);
            }

            this.Identity = projection.Identity;
            this.Context  = projection.Context;
            this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata);
            this.Data     = data;
            this.Header   = header ?? throw ProjectionException.ArgumentNull(nameof(header), metadata);
            this.Options  = options ?? throw ProjectionException.ArgumentNull(nameof(options), metadata);
        }
コード例 #5
0
 internal static IProjectionData Resolve(IProjectionData data, IProjectionMetadata metadata)
 {
     if (data == null)
     {
         return(null);
     }
     else if (data.Source.Metadata == metadata.Relation)
     {
         return(data);
     }
     else
     {
         return(ProjectionReader.Lookup(data.Source, new[] { metadata }).FirstOrDefault());
     }
 }
コード例 #6
0
        public static IProjection Val(this IProjection projection)
        {
            if (projection.Data == null)
            {
                throw ProjectionException.ValueNotFound(projection.Metadata);
            }

            IProjectionData newData = ProjectionData.Resolve(projection.Data, projection.Metadata);

            if (newData.Source.Snapshot == null)
            {
                throw ProjectionException.ValueNotFound(newData.Source);
            }

            return(projection.With(data: newData));
        }
コード例 #7
0
        protected ProjectionAttribute(IProjectionAttribute attribute, IProjectionMetadata metadata, IProjectionData data, ISqlContent content)
        {
            if (attribute == null)
            {
                throw ProjectionException.ArgumentNull(nameof(attribute), metadata);
            }

            this.Context  = attribute.Context;
            this.Identity = attribute.Identity;
            this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata);
            this.Data     = data;
            this.Content  = content ?? throw ProjectionException.ArgumentNull(nameof(content), metadata);
        }
コード例 #8
0
 public ProjectionAttribute(ProjectionIdentity identity, IProcContext context, IProjectionMetadata metadata, IProjectionData data)
 {
     this.Identity = identity ?? throw ProjectionException.ArgumentNull(nameof(identity), metadata);
     this.Context  = context ?? throw ProjectionException.ArgumentNull(nameof(context), metadata);
     this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata);
     this.Data     = data;
     this.Content  = SqlContent.Empty;
 }
コード例 #9
0
 public new IProjection <TModel> With(IProjectionMetadata metadata = null,
                                      IProjectionData data         = null,
                                      IEnumerable <IProjectionAttribute> header = null,
                                      IProjectionOptions options = null)
 => new Projection <TModel>(base.With(metadata, data, header, options));