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)); }
public static Criterion From(MemberExpression expression) { if (expression.NodeType != ExpressionType.MemberAccess) { return(null); } var property = expression.GetDatabaseColumnPath(); if (property.IsEmpty()) { return(null); } if (property.EndsWith(".HasValue")) { property = ((MemberExpression)expression.Expression).GetDatabaseColumnPath(); return(new Criterion(property, FilterFunction.IsNot, value: null)); } if ((expression.Member as PropertyInfo).PropertyType != typeof(bool)) { return(null); } // Only one property level is supported: return(new Criterion(property, FilterFunction.Is, true)); }