Uso de dinámicas o expresiones en C #
Utilizo el filtro dinámico en mi programa como la siguiente solución:
public static IQueryable<T> MyFilter<T>(this IQueryable<T> queryable) where T : class ,IModel
{
var someIds = new int[]{1,2,3,4,5};
var userId = 2;
Expression<Func<T, bool>> predicate1 = e => someIds.Contains(e.Id);
Expression<Func<T, bool>> predicate2 = e => e.UserId==userId;
Expression<Func<T, bool>> predicate3 = e => e.CreatedDate != null;
var pred1 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(predicate1, predicate2));
var pred2 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(pred1, predicate3));
var result = queryable
.Where(pred2);
return result;
}
losIModel
es así:
Public interface IModel{
int Id { get; set; }
int UserId { get; set; }
DateTime? CreatedDate { get; set; }
}
pero me sale este error:
El operador binario O no está definido para los tipos System.Func2[AnyClass,System.Boolean]' and 'System.Func
2 [AnyClass, System.Boolean] '.
en esta linea:
var pred1 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(predicate1, predicate2));
¿Como puedó resolver esté problema?
de antemano apreciamos cualquier ayuda