Я хочу объединить два 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
, чтобы сделать его как можно более универсальным?