public IRootSpecification <T> Or(IRootSpecification <T> specification) { if (this == All || specification == All) { return(All); } return(new OrSpecification <T>(this, specification)); }
public IRootSpecification <T> And(IRootSpecification <T> specification) { if (this == All) { return(specification); } if (specification == All) { return(this); } return(new AndSpecification <T>(this, specification)); }
public static void ApplySorting(this IRootSpecification gridSpec, string sort, string orderByDescendingMethodName, string groupByMethodName) { if (string.IsNullOrEmpty(sort)) { return; } const string descendingSuffix = "Desc"; var descending = sort.EndsWith(descendingSuffix, StringComparison.Ordinal); var propertyName = sort.Substring(0, 1).ToUpperInvariant() + sort.Substring(1, sort.Length - 1 - (descending ? descendingSuffix.Length : 0)); var specificationType = gridSpec.GetType().BaseType; var targetType = specificationType?.GenericTypeArguments[0]; var property = targetType !.GetRuntimeProperty(propertyName) ?? throw new InvalidOperationException($"Because the property {propertyName} does not exist it cannot be sorted."); var lambdaParamX = Expression.Parameter(targetType, "x"); var propertyReturningExpression = Expression.Lambda( Expression.Convert( Expression.Property(lambdaParamX, property), typeof(object)), lambdaParamX); if (descending) { specificationType?.GetMethod( orderByDescendingMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?.Invoke(gridSpec, new object[] { propertyReturningExpression }); } else { specificationType?.GetMethod( groupByMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ?.Invoke(gridSpec, new object[] { propertyReturningExpression }); } }
public OrSpecification(IRootSpecification <T> left, IRootSpecification <T> right) { _right = right as RootSpecification <T> ?? throw new InvalidCastException(nameof(right)); _left = left as RootSpecification <T> ?? throw new InvalidCastException(nameof(left));; }
public virtual async Task <List <TEntity> > FindAsync(IRootSpecification <TEntity> rootSpecification, IAggregatSpecification <TEntity> treeSpecification = null) { return(await FindAsync(rootSpecification.ToExpression(), treeSpecification)); }
public async Task <TEntity> FindSingleAsync(IRootSpecification <TEntity> rootSpecification , IAggregatSpecification <TEntity> treeSpecification = null) { return(await FindSingleAsync(rootSpecification.ToExpression(), treeSpecification)); }
public IEnumerable <Movie> Find(IRootSpecification <Movie> specification) { var movies = _movieTech.AsQueryable(); return(movies.Where(specification.ToExpression())); }
public AndSpecification(IRootSpecification <T> left, IRootSpecification <T> right) { _right = right as RootSpecification <T>; _left = left as RootSpecification <T>; }