public System.Linq.Expressions.Expression BuildExpressionForProperty <TEntity, TFilter>( ComparerAttribute comparer, ParameterExpression parameter, PropertyInfo entityProperty, PropertyInfo filterProperty, TFilter filter) { return(comparer.BuildExpressionForProperty <TEntity, TFilter>(parameter, entityProperty, filterProperty, filter)); }
private ComparerAttribute GetComparerAttribute(PropertyInfo property) { ComparerAttribute comparerAttribute = property.GetCustomAttribute <ComparerAttribute>(true); if (comparerAttribute != null) { return(comparerAttribute); } return(new EqualsAttribute()); }
public bool ShouldFilterByProperty <TEntity, TFilter>( ComparerAttribute comparer, PropertyInfo filterProperty, PropertyInfo entityProperty, TFilter filter) { if (entityProperty == null) { return(false); } return(IsFilterPropertyTypeValidComparable(filterProperty) && FilterAndEntityTypesMatch(filterProperty, entityProperty, comparer) && PropertyHasValue <TFilter>(filterProperty, filter)); }
private Stack <System.Linq.Expressions.Expression> StackExpressions <TEntity, TFilter>(TFilter filter, ParameterExpression parameter) { Stack <System.Linq.Expressions.Expression> expressions = new Stack <System.Linq.Expressions.Expression>(); foreach (PropertyInfo filterProperty in filter.GetType().GetTypeInfo().GetProperties()) { if (!PropertyHasValue(filterProperty, filter)) { continue; } ComparerAttribute comparer = GetComparerAttribute(filterProperty); var entityProperty = comparer.GetEntityProperty <TEntity>(filterProperty); if (ShouldFilterByProperty <TEntity, TFilter>(comparer, filterProperty, entityProperty, filter)) { expressions.Push(BuildExpressionForProperty <TEntity, TFilter>(comparer, parameter, entityProperty, filterProperty, filter)); } } return(expressions); }
public virtual bool FilterAndEntityTypesMatch(PropertyInfo filterProperty, PropertyInfo entityProperty, ComparerAttribute comparer) { return(comparer.FilterAndEntityTypesMatch(filterProperty, entityProperty)); }