Ich versuche, eine statische Funktion oder zwei Ausdrücke zu schreiben, aber empfangen die folgende Fehlermeldung:Expression.Or, Der Parameter ‚item‘ ist in ihrem Umfang nicht
The parameter 'item' is not in scope.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The parameter 'item' is not in scope.
die Methode:
public static Expression<Func<T, bool>> OrExpressions(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
{
// Define the parameter to use
var param = Expression.Parameter(typeof(T), "item");
var filterExpression = Expression.Lambda<Func<T, bool>>
(Expression.Or(
left.Body,
right.Body
), param);
// Build the expression and return it
return (filterExpression);
}
bearbeiten: Hinzufügen von mehr Info
die Ausdrücke aus dem Verfahren werden ODER-verknüpft sind unten, die ganz gut ausführen kommen. Wenn es einen besseren Weg zu den Ergebnissen gibt, bin ich ganz Ohr. Ich weiß auch nicht, wie viele im Voraus sind.
public static Expression<Func<T, bool>> FilterExpression(string filterBy, object Value, FilterBinaryExpression binaryExpression)
{
// Define the parameter to use
var param = Expression.Parameter(typeof(T), "item");
// Filter expression on the value
switch (binaryExpression)
{
case FilterBinaryExpression.Equal:
{
// Build an expression for "Is the parameter equal to the value" by employing reflection
var filterExpression = Expression.Lambda<Func<T, bool>>
(Expression.Equal(
Expression.Convert(Expression.Property(param, filterBy), typeof(TVal)),
Expression.Constant(Value)
),
param);
// Build the expression and return it
return (filterExpression);
}
bearbeiten: indem noch mehr Infos
Alternativ gibt es einen besseren Weg, um einen oder zu tun? Derzeit funktioniert die .Where (constraint) genau dort, wo die Bedingung vom Typ Expression> ist. Wie kann ich wo tun (constraint1 oder constraint2) (zur constraint n'th)
Vielen Dank im Voraus!
Vielen Dank! Gehen – ccook
Sie mein Freund, um zu versuchen und jetzt den gleichen Parameter übergeben, sind erstaunlich :) – ccook