예제 #1
0
            internal static void Analyze(MemberInitExpression mie, PathBox pb, DataServiceContext context)
            {
                ProjectionAnalyzer.EntityProjectionAnalyzer analyzer = new ProjectionAnalyzer.EntityProjectionAnalyzer(pb, mie.Type, context);
                MemberAssignmentAnalysis previous = null;

                foreach (MemberBinding binding in mie.Bindings)
                {
                    MemberAssignment assignment = binding as MemberAssignment;
                    analyzer.Visit(assignment.Expression);
                    if (assignment != null)
                    {
                        MemberAssignmentAnalysis analysis2 = MemberAssignmentAnalysis.Analyze(pb.ParamExpressionInScope, assignment.Expression);
                        if (analysis2.IncompatibleAssignmentsException != null)
                        {
                            throw analysis2.IncompatibleAssignmentsException;
                        }
                        Type         memberType = ClientTypeUtil.GetMemberType(assignment.Member);
                        Expression[] expressionsBeyondTargetEntity = analysis2.GetExpressionsBeyondTargetEntity();
                        if (expressionsBeyondTargetEntity.Length == 0)
                        {
                            throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(memberType, assignment.Expression));
                        }
                        MemberExpression expression = expressionsBeyondTargetEntity[expressionsBeyondTargetEntity.Length - 1] as MemberExpression;
                        analysis2.CheckCompatibleAssignments(mie.Type, ref previous);
                        if (expression != null)
                        {
                            if (expression.Member.Name != assignment.Member.Name)
                            {
                                throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_PropertyNamesMustMatchInProjections(expression.Member.Name, assignment.Member.Name));
                            }
                            bool flag = ClientTypeUtil.TypeOrElementTypeIsEntity(memberType);
                            if (ClientTypeUtil.TypeOrElementTypeIsEntity(expression.Type) && !flag)
                            {
                                throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjection(memberType, assignment.Expression));
                            }
                        }
                    }
                }
            }
예제 #2
0
 internal static void Analyze(MemberInitExpression mie, PathBox pb, DataServiceContext context)
 {
     ProjectionAnalyzer.EntityProjectionAnalyzer analyzer = new ProjectionAnalyzer.EntityProjectionAnalyzer(pb, mie.Type, context);
     MemberAssignmentAnalysis previous = null;
     foreach (MemberBinding binding in mie.Bindings)
     {
         MemberAssignment assignment = binding as MemberAssignment;
         analyzer.Visit(assignment.Expression);
         if (assignment != null)
         {
             MemberAssignmentAnalysis analysis2 = MemberAssignmentAnalysis.Analyze(pb.ParamExpressionInScope, assignment.Expression);
             if (analysis2.IncompatibleAssignmentsException != null)
             {
                 throw analysis2.IncompatibleAssignmentsException;
             }
             Type memberType = ClientTypeUtil.GetMemberType(assignment.Member);
             Expression[] expressionsBeyondTargetEntity = analysis2.GetExpressionsBeyondTargetEntity();
             if (expressionsBeyondTargetEntity.Length == 0)
             {
                 throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(memberType, assignment.Expression));
             }
             MemberExpression expression = expressionsBeyondTargetEntity[expressionsBeyondTargetEntity.Length - 1] as MemberExpression;
             analysis2.CheckCompatibleAssignments(mie.Type, ref previous);
             if (expression != null)
             {
                 if (expression.Member.Name != assignment.Member.Name)
                 {
                     throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_PropertyNamesMustMatchInProjections(expression.Member.Name, assignment.Member.Name));
                 }
                 bool flag = ClientTypeUtil.TypeOrElementTypeIsEntity(memberType);
                 if (ClientTypeUtil.TypeOrElementTypeIsEntity(expression.Type) && !flag)
                 {
                     throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjection(memberType, assignment.Expression));
                 }
             }
         }
     }
 }