public static LambdaExpression Build(DataAccessModel dataAccessModel, SqlDatabaseContext sqlDatabaseContext, SqlQueryProvider queryProvider, Expression expression, ProjectionBuilderScope scope) { var projectionBuilder = new ProjectionBuilder(dataAccessModel, sqlDatabaseContext, queryProvider, scope); var body = projectionBuilder.Visit(expression); return(Expression.Lambda(body, projectionBuilder.objectProjector, projectionBuilder.dataReader, projectionBuilder.versionParameter, projectionBuilder.dynamicParameters)); }
/// <summary> /// Builds the lambda expression that will perform the projection /// </summary> /// <param name="dataAccessModel">The related data access model</param> /// <param name="sqlDatabaseContext">The related <see cref="SqlDatabaseContext"/></param> /// <param name="expression"> /// The expression that performs the projection (can be any expression but usually is a MemberInit expression) /// </param> /// <returns> /// A <see cref="LambdaExpression"/> that takes two parameters: an <see cref="ObjectProjector"/> /// and an <see cref="IDataReader"/>. The lambda expression will construct a single /// object for return from the current row in the given <see cref="IDataReader"/>. /// </returns> public static LambdaExpression Build(DataAccessModel dataAccessModel, SqlDatabaseContext sqlDatabaseContext, Expression expression, IEnumerable <string> columns) { var projectionBuilder = new ProjectionBuilder(dataAccessModel, sqlDatabaseContext, columns); var body = projectionBuilder.Visit(expression); return(Expression.Lambda(body, projectionBuilder.objectProjector, projectionBuilder.dataReader, projectionBuilder.dynamicParameters)); }
/// <summary> /// Builds the lambda expression that will perform the projection /// </summary> /// <param name="dataAccessModel">The related data access model</param> /// <param name="sqlDatabaseContext">The related <see cref="SqlDatabaseContext"/></param> /// <param name="expression"> /// The expression that performs the projection (can be any expression but usually is a MemberInit expression) /// </param> /// <returns> /// A <see cref="LambdaExpression"/> that takes two parameters: an <see cref="ObjectProjector"/> /// and an <see cref="IDataReader"/>. The lambda expression will construct a single /// object for return from the current row in the given <see cref="IDataReader"/>. /// </returns> public static LambdaExpression Build(DataAccessModel dataAccessModel, SqlDatabaseContext sqlDatabaseContext, Expression expression, IEnumerable<string> columns) { var projectionBuilder = new ProjectionBuilder(dataAccessModel, sqlDatabaseContext, columns); var body = projectionBuilder.Visit(expression); return Expression.Lambda(body, projectionBuilder.objectProjector, projectionBuilder.dataReader, projectionBuilder.dynamicParameters); }
public static LambdaExpression Build(DataAccessModel dataAccessModel, SqlDatabaseContext sqlDatabaseContext, SqlQueryProvider queryProvider, Expression expression, ProjectionBuilderScope scope, out Expression <Func <IDataReader, object[]> > rootKeys) { var projectionBuilder = new ProjectionBuilder(dataAccessModel, sqlDatabaseContext, queryProvider, scope); var body = projectionBuilder.Visit(expression); if (projectionBuilder.scope.rootPrimaryKeys.Count > 0) { rootKeys = Expression.Lambda <Func <IDataReader, object[]> >(Expression.NewArrayInit(typeof(object), projectionBuilder.scope.rootPrimaryKeys), projectionBuilder.dataReader); } else { rootKeys = null; } return(Expression.Lambda(typeof(ObjectReaderFunc <>).MakeGenericType(body.Type), body, projectionBuilder.objectProjector, projectionBuilder.dataReader, projectionBuilder.versionParameter, projectionBuilder.dynamicParameters)); }
public static LambdaExpression Build(DataAccessModel dataAccessModel, SqlDatabaseContext sqlDatabaseContext, SqlQueryProvider queryProvider, Expression expression, ProjectionBuilderScope scope, out Expression<Func<IDataReader, object[]>> rootKeys) { var projectionBuilder = new ProjectionBuilder(dataAccessModel, sqlDatabaseContext, queryProvider, scope); var body = projectionBuilder.Visit(expression); if (projectionBuilder.scope.rootPrimaryKeys.Count > 0) { rootKeys = Expression.Lambda<Func<IDataReader, object[]>>(Expression.NewArrayInit(typeof(object), projectionBuilder.scope.rootPrimaryKeys), projectionBuilder.dataReader); } else { rootKeys = null; } return Expression.Lambda(body, projectionBuilder.objectProjector, projectionBuilder.dataReader, projectionBuilder.versionParameter, projectionBuilder.dynamicParameters, projectionBuilder.filterParameter); }