public static FilterExpressionData JoinFilters(eAndOrJoin andOrJoin, params FilterExpressionData[] filters) { List <FilterExpressionData> lFilters = filters.Distinct <FilterExpressionData>().ToList <FilterExpressionData>(); lFilters.RemoveAll(item => item == null); if (lFilters.Count == 0) { return(new FltGroupExprData(andOrJoin)); //return empty and group filter } if (lFilters.Count == 1) { return(lFilters[0].Clone()); //return the only provided filter } FltGroupExprData groupFilter = null; foreach (var flt in lFilters)//check if in collection already exist an and filter { if (flt is FltGroupExprData) { groupFilter = flt as FltGroupExprData; if (groupFilter.AndOr == andOrJoin) { break; } else { groupFilter = null; } } } if (groupFilter == null) { return(Filter.And(new FltGroupExprData(andOrJoin, lFilters.ToArray()))); } else //if yes, add to him the rest expression and return it. { lFilters.Remove(groupFilter); groupFilter = groupFilter.Clone() as FltGroupExprData; foreach (var flt in lFilters) { if (!groupFilter.FilterExpressions.Contains(flt)) { groupFilter.FilterExpressions.Add(flt.Clone()); } } return(groupFilter); } }
public static FilterExpressionData operator &(FilterExpressionData f1, FilterExpressionData f2) { return(Filter.And(f1, f2)); }