public void Build(EntityFilter entityFilter) { _expression.Length = 0; _values.Clear(); if (entityFilter == null) { return; } Visit(entityFilter); }
private bool WriteGroup(EntityFilter entityFilter) { var hasGroup = entityFilter.Filters != null && entityFilter.Filters.Any(); if (!hasGroup) { return(false); } if (!string.IsNullOrWhiteSpace(entityFilter.Name)) { var logic = string.IsNullOrWhiteSpace(entityFilter.Logic) ? EntityFilterLogic.And : entityFilter.Logic; _expression.Append($" {logic} ("); } else { _expression.Append("("); } foreach (var filter in entityFilter.Filters) { Visit(filter); var isLast = entityFilter.Filters.LastOrDefault() == filter; if (filter == null) { continue; } var filterLogic = string.IsNullOrWhiteSpace(filter.Logic) ? EntityFilterLogic.And : filter.Logic; if (!isLast) { _expression.Append($" {filterLogic} "); } } _expression.Append(")"); return(true); }
private void WriteExpression(EntityFilter entityFilter) { if (string.IsNullOrWhiteSpace(entityFilter.Name)) { return; } var index = _values.Count; var name = entityFilter.Name; var value = entityFilter.Value; var o = string.IsNullOrWhiteSpace(entityFilter.Operator) ? "==" : entityFilter.Operator; _operatorMap.TryGetValue(o, out string comparison); if (string.IsNullOrEmpty(comparison)) { comparison = o.Trim(); } var negation = comparison.StartsWith("!") || comparison.StartsWith("not", StringComparison.OrdinalIgnoreCase) ? "!" : string.Empty; if (comparison.EndsWith(EntityFilterOperators.StartsWith, StringComparison.OrdinalIgnoreCase)) { _expression.Append($"{negation}{name}.StartsWith(@{index})"); } else if (comparison.EndsWith(EntityFilterOperators.EndsWith, StringComparison.OrdinalIgnoreCase)) { _expression.Append($"{negation}{name}.EndsWith(@{index})"); } else if (comparison.EndsWith(EntityFilterOperators.Contains, StringComparison.OrdinalIgnoreCase)) { _expression.Append($"{negation}{name}.Contains(@{index})"); } else { _expression.Append($"{name} {comparison} @{index}"); } _values.Add(value); }
private void Visit(EntityFilter entityFilter) { WriteExpression(entityFilter); WriteGroup(entityFilter); }
public EntityListQuery(EntityFilter filter) { Filter = filter; }