I need to check entity in geenric service if it is Entity type, I should add dynamic expression where .Where("IsDeleted==false");
var result = _entityRepo.All();
var isEntityType = typeof(Entity).IsAssignableFrom(typeof(T));
if (isEntityType)
{
var expression = CreateExpression("IsDeleted", true);
var casted = (Expression<Func<T, bool>>)expression;
result = result.Where(casted);
}
return result;
_entityRepo
is GenericRepository<T>
public static Expression CreateExpression(string propertyName, bool valueToCompare)
{
// get the type of entity
var entityType = typeof(Entity);
// get the type of the value object
var entityProperty = entityType.GetProperty(propertyName);
// Expression: "entity"
var parameter = Expression.Parameter(entityType, "entity");
// check if the property type is a value type
// only value types work
// Expression: entity.Property == value
return Expression.Equal(
Expression.Property(parameter, entityProperty),
Expression.Constant(valueToCompare)
);
}
off course I get error on cast:
Unable to cast object of type 'System.Linq.Expressions.LogicalBinaryExpression' to type 'System.Linq.Expressions.Expression
1[System.Func
2[MadCloud.Domain.Auditing.AuditCategory,System.Boolean]]'.