Заменить тип в дереве выражений

Я борюсь с модификацией дерева выражений. Я'Мы упростили пример, чтобы его было проще отображать здесь. Позволять'Начнем с двух классов:

    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; }
    }

Все свойства в классе Filter также существуют в классе Entity. Теперь я хотел бы использовать класс Filter для возврата нужных объектов с помощью метода, подобного следующему:

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

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

Поэтому я просто изменяю тип параметра выражения. Теперь, когда я вызываю функцию так:

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

Я получаю исключение о том, что параметр x не найден в указанном выражении запроса. Очевидно, что заменяя выражение ParameterExpression, я что-то ломаю. Как я могу создать новое выражение с правильным типом, который принимает (или перестраивает) тело исходного выражения?

Ответы на вопрос(1)

Ваш ответ на вопрос