Esempio n. 1
0
        public static Criterion From(MemberExpression expression)
        {
            if (expression.NodeType != ExpressionType.MemberAccess)
            {
                return(null);
            }

            if (expression.GetPropertiesInPath().LastOrDefault()?.Name == "HasValue" &&
                expression.Expression is MemberExpression memberExpression)
            {
                var nullableProperty = memberExpression.GetDatabaseColumnPath();
                return(new Criterion(nullableProperty, FilterFunction.IsNot, value: null));
            }

            var property = expression.GetDatabaseColumnPath();

            if (property.IsEmpty())
            {
                return(null);
            }

            if ((expression.Member as PropertyInfo).PropertyType != typeof(bool))
            {
                return(null);
            }

            // Only one property level is supported:
            return(new Criterion(property, FilterFunction.Is, true));
        }
Esempio n. 2
0
        public static string GetDatabaseColumnPath(this MemberExpression memberInfo)
        {
            var path = memberInfo.GetPropertiesInPath();

            if (path.None())
            {
                return(null);
            }

            if (path.ExceptLast().Any(x => !x.PropertyType.Implements <IEntity>()))
            {
                return(null);
            }

            return(path.Select(GetColumnName).ToString("."));
        }