Zastąp typ w drzewie wyrażeń

Walczę z modyfikacją drzewa wyrażeń. Uprościłem przykład, aby ułatwić wyświetlanie tutaj. Zacznijmy od dwóch klas:

    public class Filter
    {
        public string FilterableProperty1 { get; set; }
        public string FilterableProperty2 { get; set; }
    }

    public class Entity
    {
        public string FilterableProperty1 { get; set; }
        public string FilterableProperty2 { get; set; }
        public string NonFilterableProperty { get; set; }
    }

Wszystkie właściwości w klasie Filter istnieją również w klasie Entity. Teraz chciałbym użyć klasy Filter, aby zwrócić żądane elementy za pomocą metody takiej jak ta:

    public IEnumerable<Entity> GetEntities(Expression<Func<Filter, bool>> filter)
    {
        Expression<Func<Entity, bool>> convertedFilter = Expression.Lambda<Func<Entity, bool>>(
            filter.Body,
            Expression.Parameter(typeof(Entity), filter.Parameters[0].Name));

        using (MyEntities entities = new MyEntities())
        {
            return entities.Entities.Where(convertedFilter);
        }
    }

Więc po prostu zmieniam typ parametru wyrażenia. Teraz, gdy wywołam taką funkcję:

    public IEnumerable<Entity> GetFilteredEntities()
    {
        return GetEntities(x => x.FilterableProperty1 == "Test");
    }

Otrzymuję wyjątek mówiący, że parametr x nie został znaleziony w określonym wyrażeniu zapytania. Oczywiście przez zastąpienie wyrażenia ParameterExpress coś łamie. Jak mogę utworzyć nowe wyrażenie z prawidłowym typem, który przejmuje (lub odbudowuje) treść oryginalnego wyrażenia?

questionAnswers(1)

yourAnswerToTheQuestion