Expression.Equal игнорирует IComparable

Когда я пытаюсь построить Equal-Expression для объектов, реализующих IComparable, мое сравнение не удалось. Это так задумано или я что-то не так сделал?

Вот что я пробовал:

void Main()
{
    var collection = new[]
    {
        new Comparable { B = "abc" },
        new Comparable { B = "def" },
        new Comparable { B = "ghi" }
    };
    
    var result = collection.AsQueryable().Where(CreateEqualExpression<Comparable, Comparable>(x => x, new Comparable { B = "def" }));
    Console.WriteLine(result.Count()); // returns 0
    
    result = collection.AsQueryable().Where(CreateEqualExpression<Comparable, Comparable>(x => x, collection[1]));
    Console.WriteLine(result.Count()); // returns 1
}

public static Expression<Func<TInstance, bool>> CreateEqualExpression<TInstance, TElement>(Expression<Func<TInstance, TElement>> target, TElement filter)
{
    var parameter = target.Parameters.Single();
    var expr = Expression.Equal(target.Body, Expression.Constant(filter));
    return Expression.Lambda<Func<TInstance, bool>>(expr, parameter);
}

public class Comparable : IEquatable<Comparable>, IComparable<Comparable>, IComparable
{
    public string B { get; set; }

    public bool Equals(Comparable other)
    {
        return B == other?.B;
    }

    public int CompareTo(Comparable other)
    {
        return string.Compare(B, other?.B, StringComparison.InvariantCulture);
    }

    public int CompareTo(object obj)
    {
        return CompareTo(obj as Comparable);
    }
}

person porti20    schedule 17.07.2020    source источник
comment
TFM docs.microsoft .com/en-us/dotnet/api/ говорит только о ==... Вы уверены, что просматриваете правильную документацию?   -  person Alexei Levenkov    schedule 17.07.2020
comment
Expression.Equal вызовет только оператор равенства. c# не требует, чтобы == вызывал Equals()   -  person Jeremy Lakeman    schedule 17.07.2020
comment
Но сравнение по ссылке, кажется, работает без оператора. Как это подходит?   -  person porti20    schedule 17.07.2020