EqualsMethodCallTransformer implements IMethodCallTransformer for different Equals methods. The transformer is registered by name, not by method, so it will handle every method named "Equals" unless a specific MethodInfo-based transformer has been registered for that method.
Наследование: IMethodCallTransformer
    public void Transform_InstanceMethod_IncompatibleTypes ()
    {
      var method = typeof (object).GetMethod ("Equals", new[] { typeof (object) });
      var instance = Expression.Constant (0);
      var argument = Expression.Constant ("string");
      var expression = Expression.Call (instance, method, argument);

      var transformer = new EqualsMethodCallTransformer ();
      var result = transformer.Transform (expression);

      var expectedResult = Expression.Equal (Expression.Convert (instance, typeof (object)), Expression.Convert (argument, typeof (object)));
      SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result);
    }
    public void Transform_StaticMethod ()
    {
      var method = typeof (object).GetMethod ("Equals", new[] { typeof (object), typeof(object) });
      var parameter1 = Expression.Constant (new object ());
      var parameter2 = Expression.Constant (new object ());
      var expression = Expression.Call (method, parameter1, parameter2);

      var transformer = new EqualsMethodCallTransformer ();
      var result = transformer.Transform (expression);

      var expectedResult = Expression.Equal (parameter1, parameter2);
      SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result);
    }
    public void Transform_InstanceMethod ()
    {
      var method = typeof (object).GetMethod ("Equals", new[] { typeof(object) });
      var instance = Expression.Constant (new object());
      var argument = Expression.Constant(new object());
      var expression = Expression.Call (instance, method, argument);

      var transformer = new EqualsMethodCallTransformer ();
      var result = transformer.Transform (expression);

      var expectedResult = Expression.Equal (instance, argument);
      SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result);
    }
    public void Transform_WrongNumberOfArguments ()
    {
      var method = typeof (object).GetMethod ("ToString", new Type[0]);
      var expression = Expression.Call (Expression.Constant("test"), method);

      var transformer = new EqualsMethodCallTransformer ();
      transformer.Transform (expression);
    }
    public void Transform_StaticMethod_NonMatchingTypes ()
    {
      var method = typeof (object).GetMethod ("Equals", new[] { typeof (object), typeof (object) });
      var parameter1 = Expression.Constant ("s");
      var parameter2 = Expression.Constant (null, typeof (Cook));
      var expression = Expression.Call (method, parameter1, parameter2);

      var transformer = new EqualsMethodCallTransformer ();
      var result = transformer.Transform (expression);

      var expectedResult = Expression.Equal (Expression.Convert (parameter1, typeof (object)), Expression.Convert (parameter2, typeof (object)));
      SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result);
    }