private static bool HasMatchInList(
     DbPropertyExpression expr,
     IList <DbPropertyExpression> list,
     string exprBindingVariableName,
     string listExpressionsBindingVariableName)
 {
     for (int index = 0; index < list.Count; ++index)
     {
         if (Sql8ExpressionRewriter.AreMatching(expr, list[index], exprBindingVariableName, listExpressionsBindingVariableName))
         {
             list.RemoveAt(index);
             return(true);
         }
     }
     return(false);
 }
        private static bool AreMatching(
            DbPropertyExpression expr1,
            DbPropertyExpression expr2,
            string expr1BindingVariableName,
            string expr2BindingVariableName)
        {
            if (expr1.Property.Name != expr2.Property.Name || expr1.Instance.ExpressionKind != expr2.Instance.ExpressionKind)
            {
                return(false);
            }
            if (expr1.Instance.ExpressionKind == DbExpressionKind.Property)
            {
                return(Sql8ExpressionRewriter.AreMatching((DbPropertyExpression)expr1.Instance, (DbPropertyExpression)expr2.Instance, expr1BindingVariableName, expr2BindingVariableName));
            }
            DbVariableReferenceExpression instance1 = (DbVariableReferenceExpression)expr1.Instance;
            DbVariableReferenceExpression instance2 = (DbVariableReferenceExpression)expr2.Instance;

            if (string.Equals(instance1.VariableName, expr1BindingVariableName, StringComparison.Ordinal))
            {
                return(string.Equals(instance2.VariableName, expr2BindingVariableName, StringComparison.Ordinal));
            }
            return(false);
        }