Beispiel #1
0
        public virtual EntityMaterializer CreateEntityMaterializer(DbTableInfo table, IList <DbColumnInfo> columns)
        {
            var matzr = new EntityMaterializer(table);

            foreach (var col in columns)
            {
                matzr.AddColumn(col);
            }
            return(matzr);
        }
        // RI: new stuff, optimized entity reader
        protected virtual Expression GetOutputTableReader(TableExpression tableExpression,
                                                          ParameterExpression dataRecordParameter, ParameterExpression sessionParameter,
                                                          TranslationContext context)
        {
            // Note: we have to create materializer each time, because column indexes in output can change from query to query
            var entMatzer   = new EntityMaterializer(tableExpression.TableInfo);
            var allColExprs = RegisterAllColumns(tableExpression, context);

            foreach (var col in allColExprs)
            {
                var colIndex = RegisterOutputValue(col, context);
                entMatzer.AddColumn(col.ColumnInfo, colIndex);
            }
            var entMatzerConst = Expression.Constant(entMatzer);
            var callReadEntity = Expression.Call(entMatzerConst, EntityMaterializer.ReadMethodInfo, dataRecordParameter, sessionParameter);
            var convExpr       = Expression.Convert(callReadEntity, tableExpression.Type);

            return(convExpr);
        }