protected override Expression VisitStructureFieldExpression(StructureFieldExpression expression) { var tupleExpression = GetTupleExpression(expression); // Materialize non-owned structure. if (expression.Owner == null) { var typeInfo = expression.PersistentType; var tuplePrototype = typeInfo.TuplePrototype; var mappingInfo = expression.Fields .OfType <FieldExpression>() .Where(f => f.ExtendedType == ExtendedExpressionType.Field) .OrderBy(f => f.Field.MappingInfo.Offset) .Select(f => new Pair <int>(f.Field.MappingInfo.Offset, f.Mapping.Offset)) .Distinct() .ToArray(); int[] columnMap = MaterializationHelper.CreateSingleSourceMap(tuplePrototype.Count, mappingInfo); var persistentTupleExpression = (Expression)Expression.Call( BuildPersistentTupleMethod, tupleExpression, Expression.Constant(tuplePrototype), Expression.Constant(columnMap)); return(Expression.Convert( Expression.Call( WellKnownMembers.CreateStructure, Expression.Field(itemMaterializationContextParameter, ItemMaterializationContext.SessionFieldInfo), Expression.Constant(expression.Type), persistentTupleExpression), expression.Type)); } return(MaterializeThroughOwner(expression, tupleExpression)); }
protected override Expression VisitStructureFieldExpression(StructureFieldExpression s) { ProcessFieldOwner(s); AddColumns(s, s.Fields .Where(f => f.ExtendedType == ExtendedExpressionType.Field) .Select(f => f.Mapping.Offset)); return(s); }
protected override Expression VisitStructureFieldExpression(StructureFieldExpression expression) { return(expression); }
protected override Expression VisitStructureFieldExpression(StructureFieldExpression expression) { return(expression.RemoveOwner()); }
protected virtual Expression VisitStructureFieldExpression(StructureFieldExpression expression) { return(expression); }