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 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(".")); }