public Expression SplitPotentialCompoundComparison (BinaryExpression potentialCompoundComparison)
{
ArgumentUtility.CheckNotNull ("potentialCompoundComparison", potentialCompoundComparison);
var left = potentialCompoundComparison.Left;
var right = potentialCompoundComparison.Right;
var nodeType = potentialCompoundComparison.NodeType;
// NewExpressions are compared by comparing them member-wise
var leftExpressionAsNewExpression = left as NewExpression;
var rightExpressionAsNewExpression = right as NewExpression;
if (leftExpressionAsNewExpression != null && rightExpressionAsNewExpression != null)
{
return CreateCtorArgComparison (
nodeType, leftExpressionAsNewExpression, rightExpressionAsNewExpression);
}
// If only one of the expressions is a NewExpression, we'll assume the form "new { Member = Value } == object", and use the members for the
// comparison: "Value == object.Member".
if (leftExpressionAsNewExpression != null)
return CreateMemberAccessComparison (nodeType, leftExpressionAsNewExpression, right);
if (rightExpressionAsNewExpression != null)
return CreateMemberAccessComparison (nodeType, rightExpressionAsNewExpression, left);
return potentialCompoundComparison;
}