мне нужно проверить объект в geenric службы, если это тип сущности, я должен добавить динамическое выражение где .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
является 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)
);
}
с курса я получаю ошибку на гипсе:
Невозможно лить объект типа 'System.Linq.Expressions.LogicalBinar yExpression 'на тип ' System.Linq.Expressions.Expression
1[System.Func
2 [MadCloud.Domain.Auditing.AuditCategory, System.Boolean]] '.
Для этого вам не нужна и не нужна магия выражения. Просто используйте интерфейс IDeletableEntity, который объявляет свойство 'IsDeleted'. – CodeCaster
Не могли бы вы рассказать больше? – Mediator
Возможно, вы должны сделать его менее общим и определить BaseEntity, который поддерживает параметр IsDeleted. – MrFox