示例#1
0
        public IResultMapper <T> Select <T>(Expression <Func <TEntity, T> > expression)
        {
            var sqlExpression = _valueConverter.ConvertExpression(expression);
            var alias         = $"__AutoAlias_{_projectionExpressions.Count}";

            _projectionExpressions.Add(
                alias,
                QueryExpression.As(
                    sqlExpression.QueryExpression,
                    alias, out var _)
                );
            if (sqlExpression.RequiresJoins)
            {
                _joinBuilders.AddRange(sqlExpression.Joins);
            }
            return(new ValueMapper <T>(alias));
        }
示例#2
0
        public IResultMapper <T> Select <T>(SqlStorageField <TEntity, T> field)
        {
            var alias = $"__AutoAlias_{_projectionExpressions.Count}";

            _projectionExpressions.Add(
                alias,
                QueryExpression.As(
                    QueryExpression.Column(field.ColumnName),
                    alias, out var _)
                );
            if (field.RequiresJoin)
            {
                _joinBuilders.AddRange(
                    field.JoinSpecification.CreateJoin(_dataSchema, field, _tableIdentifier)
                    .Select(q => q.Builder)
                    );
            }
            return(new ValueMapper <T>(alias));
        }
示例#3
0
        private QueryExpression AddEntityTypeFilter(EntitySet currentEntitySet, QueryExpression query, EntityTypeSegment oftypeSegment)
        {
            ExceptionUtilities.CheckObjectNotNull(currentEntitySet, "Expected an EntitySet Segment prior to a an EntityTypeSegment");

            var queryEntityType = this.Repository.TypeLibrary.GetQueryEntityType(currentEntitySet, oftypeSegment.EntityType);

            ExceptionUtilities.CheckObjectNotNull(queryEntityType, "QueryEntityType must not be null");

            // have to resolve the query to determine if its a singleton or a collection so far
            query = this.QueryResolver.Resolve(query);
            if (query.ExpressionType is QueryCollectionType)
            {
                query = query.OfType(queryEntityType);
            }
            else
            {
                query = query.As(queryEntityType);
            }

            return(query);
        }
示例#4
0
        public JoinQueryExpression Build()
        {
            var rightIdentifier = QueryExpression.AliasReference(((IAliasIdentifier)this).AliasIdentifier);
            var leftIdentifier  = QueryExpression.AliasReference(Left.AliasIdentifier);

            var onCondition = default(QueryExpression);

            foreach (var columnPair in ColumnPairs)
            {
                var newCondition = QueryExpression.AreEqual(
                    QueryExpression.Column(columnPair.LeftColumnName, leftIdentifier),
                    QueryExpression.Column(columnPair.RightColumnName, rightIdentifier)
                    );
                onCondition = onCondition.AndAlso(newCondition);
            }

            return(QueryExpression.Join(
                       QueryExpression.As(
                           QueryExpression.AliasReference(Right.AliasIdentifier), rightIdentifier.IdentifierName, out var _
                           ),
                       onCondition,
                       Direction
                       ));
        }
示例#5
0
        private QueryExpression AddEntityTypeFilter(EntitySet currentEntitySet, QueryExpression query, EntityTypeSegment oftypeSegment)
        {
            ExceptionUtilities.CheckObjectNotNull(currentEntitySet, "Expected an EntitySet Segment prior to a an EntityTypeSegment");

            var queryEntityType = this.Repository.TypeLibrary.GetQueryEntityType(currentEntitySet, oftypeSegment.EntityType);
            ExceptionUtilities.CheckObjectNotNull(queryEntityType, "QueryEntityType must not be null");
            
            // have to resolve the query to determine if its a singleton or a collection so far
            query = this.QueryResolver.Resolve(query);
            if (query.ExpressionType is QueryCollectionType)
            {
                query = query.OfType(queryEntityType);
            }
            else
            {
                query = query.As(queryEntityType);
            }
            
            return query;
        }