public static string GetExperssion <T>(this IQueryable <T> items, IList <IFilterDescriptor> filter, FilterCompositionLogicalOperator opr = FilterCompositionLogicalOperator.And) { string q = ""; if (filter.Is(typeof(FilterDescriptor))) { var list = filter.Cast <FilterDescriptor>(); foreach (var i in list) { q += i.Operator.getOerationToString().Replace("y", i.Member).Replace("x", i.Value.ToString()) + " " + (list.Last().Value == i.Value ? " " : " " + opr.ToString() + " "); } } else if (filter.Is(typeof(CompositeFilterDescriptor))) { foreach (var i in filter.Cast <IFilterDescriptor>()) { if (i.GetType() == typeof(CompositeFilterDescriptor)) { q += "(" + items.GetExperssion(((CompositeFilterDescriptor)i).FilterDescriptors, ((CompositeFilterDescriptor)i).LogicalOperator) + " ) " + (filter.Cast <IFilterDescriptor>().Last() == ((CompositeFilterDescriptor)i) ? " " : " And "); } else if (i.GetType() == typeof(FilterDescriptor)) { q += ((FilterDescriptor)i).Operator.getOerationToString().Replace("y", ((FilterDescriptor)i).Member).Replace("x", ((FilterDescriptor)i).Value.ToString()) + " " + (filter.Cast <IFilterDescriptor>().Last() == ((FilterDescriptor)i) ? " " : " " + opr.ToString() + " "); } } } return(q); }
/// <summary> /// Renders a relationship operator /// </summary> /// <param name="builder"></param> /// <param name="relationship"></param> protected virtual void RelationshipOperator(StringBuilder builder, FilterCompositionLogicalOperator relationship) { builder.AppendFormat(" {0} ", relationship.ToString().ToLower()); }