예제 #1
0
        private static Expression GetExpression <T>(Expression param, ListFilter filter)
        {
            var member = param;

            member = filter.PropertyName.Split(".").Aggregate(member, Expression.Property); // takes X.X notation and gets to the nested property member

            var propertyType = ((PropertyInfo)member.To <MemberExpression>().Member).PropertyType;

            if (propertyType.GetInterface(nameof(IList)) != null)
            {
                var elementType = propertyType.GetTypeInfo().GenericTypeArguments[0];
                return(filter.ORExpressions(f => GetListExpression <T>(elementType, member, f)));
            }

            if (propertyType.IsEnum || (propertyType.IsNullable() && Nullable.GetUnderlyingType(propertyType).IsEnum))
            {
                return(filter.ORExpressions(f => GetEnumExpression <T>(propertyType, member, f)));
            }
            return(filter.ORExpressions(f => GetStringExpression <T>(propertyType, member, f)));
        }