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)); }
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)); }
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); }
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 )); }
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; }