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