コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: ProjectionBuilder.cs プロジェクト: ciker/Shaolinq
        /// <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));
        }
コード例 #3
0
ファイル: ProjectionBuilder.cs プロジェクト: ciker/Shaolinq
        /// <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);
        }
コード例 #4
0
        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));
        }
コード例 #5
0
		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);
		}