示例#1
0
        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);
 }
示例#3
0
 protected override Expression VisitStructureFieldExpression(StructureFieldExpression expression)
 {
     return(expression);
 }
 protected override Expression VisitStructureFieldExpression(StructureFieldExpression expression)
 {
     return(expression.RemoveOwner());
 }
示例#5
0
 protected virtual Expression VisitStructureFieldExpression(StructureFieldExpression expression)
 {
     return(expression);
 }