Я пытаюсь написать статическую функцию для двух выражений или двух, но получаю следующую ошибку:
Параметр «элемент» не входит в область действия.
Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.InvalidOperationException: параметр «элемент» не входит в область действия.
метод:
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);
}
изменить: добавить дополнительную информацию
Выражения, являющиеся or'd, исходят из приведенного ниже метода, который выполняется просто отлично. если есть лучший способ или результаты я все уши. Кроме того, я не знаю, сколько из них в настоящее время или заранее.
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);
}
изменить: добавить еще больше информации
В качестве альтернативы, есть ли лучший способ сделать или? В настоящее время .Where(constraint) отлично работает там, где ограничение имеет тип Expression>. Как я могу сделать, где (ограничение1 или ограничение2) (до ограничения n-го)
Заранее спасибо!