using System.Collections.Generic;
using System.Linq.Expressions;
public static void Main()
var cq = new QueryFilterBuilder<Customer>();
cq.QueryFor(c => c.VendorId, Operator.NotEqual, null)
.QueryFor(c => c.Identifier, Operator.Contains, "123456");
Console.WriteLine(cq.Build());
[JsonProperty("category")]
[JsonProperty("operator")]
public QueryFilter(string category, Operator @operator, object value)
Operator = @operator.ToString();
public class QueryFilterBuilder<T>
private List<QueryFilter> _filters = new List<QueryFilter>();
public QueryFilterBuilder<T> QueryFor<TProperty>(Expression<Func<T, TProperty>> expression, Operator @operator, object value)
MemberExpression memeberExpression = expression.Body as MemberExpression;
_filters.Add(new QueryFilter(memeberExpression.Member.Name, @operator, value));
return JsonConvert.SerializeObject(_filters);
public static Operator Equal = new Operator("eşittir");
public static Operator NotEqual = new Operator("eşit değildir");
public static Operator LessThan = new Operator("küçüktür");
public static Operator LessThanOrEqual = new Operator("küçük ve eşittir");
public static Operator GreaterThan = new Operator("büyüktür");
public static Operator GreaterThanOrEqual = new Operator("büyük ve eşittir");
public static Operator Contains = new Operator("içeren");
public static Operator StartsWith = new Operator("ile başlayan");
public static Operator DoesNotContains = new Operator("içermeyen");
public static Operator DoesNotStartsWith = new Operator("ile başlamayan");
private Operator(string operation)
public override string ToString()
public string ContractServiceId
public int ? CustomerType
public DateTime CreateDate
public DateTime? UpdateDate