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