Estoy tratando de escribir una función estática a uno o dos expresiones, pero recibo el siguiente error:Expression.Or, el 'elemento' parámetro no está en el ámbito
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.
el método:
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);
}
edición: la adición de más información
las expresiones están usando OR están llegando desde el siguiente método, que ejecuta muy bien. si hay una mejor manera o los resultados, soy todo oídos. Además, no sé cuántos se están haciendo o por adelantado.
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);
}
edición: añadiendo aún más información
Por otra parte, hay una mejor manera de hacer una o? Actualmente, .Where (restricción) funciona bien donde la restricción es de tipo Expresión>. ¿Cómo puedo hacer dónde (constraint1 o constraint2) (a la restricción n'th)
¡Gracias de antemano!
¡Gracias! Intentando pasar el mismo parámetro ahora – ccook
Eres mi amigo, eres increíble :) – ccook