static int CompareSqrtPart(Expr x, Expr y) { var sqrtLengthComparison = Comparer<int>.Default.Compare(y.ExprOrAddToAdd().Length, x.ExprOrAddToAdd().Length); if(sqrtLengthComparison != 0) return sqrtLengthComparison; var xSqrtList = x.ExprOrAddToAdd().Select(a => GetParamOrPowerArgsWithSqrt(a.ExprOrMultToMult())); var ySqrtList = y.ExprOrAddToAdd().Select(a => GetParamOrPowerArgsWithSqrt(a.ExprOrMultToMult())); return xSqrtList.Zip(ySqrtList, (a, b) => CompareMult(a, b)).FirstOrDefault(a => a != 0); }