Das Teilen eines Ausdrucks in C # mit Expression.AndAlso () verursacht eine Ausnahme

Auf meinem in C # geschriebenen Projekt habe ich ein RIESIGES Prädikat gefunden, das in dieser Methode von linq verwendet wird:

public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);

dieses Prädikat funktioniert perfekt, aber es ist so viel Bedingung, dass ich viel Mühe hatte, bevor ich es verstand. Ich möchte es lesbar machen. Also habe ich mehrere Expression geschrieben.

Aber ich habe eine Laufzeitausnahme wie diese:Der gefürchtete "Parameter wurde im angegebenen LINQ to Entities-Abfrageausdruck nicht gebunden" Ausnahme

Ich wollte die Antwort versuchen, verstehe aber immer noch nicht, warum der Parameter (c) ein Problem darstellt. Siehe:

// in a method
Func<string, Expression<Func<TEntity, bool>>> expr1 = (query) => return (c) => ... ;
Func<string, Expression<Func<TEntity, bool>>> expr2 = (query) => return  (c) => ... ;

var expr = Expression.AndAlso(expr1("a string").Body, expr2("same string").Body);

return Expression.Lambda<Func<TEntity, bool>>(expr , expr1("a string").Parameters[0]);

Meine Frage ist zu verstehen, warum diese Ausnahme auftritt, als ich schließlich zu dem riesigen Prädikat zurückkehrte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage