Как построить LambdaExpression из существующего LambdaExpression без компиляции

Я хочу объединить два LambdaExpression, не компилируя их.

Вот как это выглядит, если Я компилирую их:

    public Expression<Func<TContainer,bool>> CreatePredicate<TContainer,TMember>(
        Expression<Func<TContainer,TMember>> getMemberExpression, 
        Expression<Func<TMember,bool>> memberPredicateExpression)
    {
        return x => memberPredicateExpression.Compile()(getMemberExpression.Compile()(x));
    }

Очевидно, это не самый быстрый способ получить целевое выражение из предоставленных аргументов. Кроме того, это делает его несовместимым с поставщиками запросов, такими как LINQ to SQL, которые не поддерживают вызовы методов C #.

Из того, что я читал, кажется, что лучший подход - это создать класс ExpressionVisitor . Однако, похоже, это может быть довольно распространенная задача. Кто-нибудь знает о существующей базе открытого исходного кода, которая обеспечивает такую ​​функциональность? Если нет, как лучше всего подойти к ExpressionVisitor , чтобы сделать его как можно более универсальным?

5
задан smartcaveman 19 March 2011 в 12:07
поделиться