GetExpression Private overload C# with Example
For one filter: Here is where the query is created, it receives a expression parameter and a filter. private static Expression GetExpression(ParameterExpression param, QueryFilter queryFilter) { // Represents accessing a field or property, so here we are accessing for example: // the property "Name" of the entity MemberExpression member = Expression.Property(param, queryFilter.PropertyName); //Represents an expression that has a constant value, so here we are accessing for example: // the values of the Property "Name". // Also for clarity sake the GetConstant will be explained in another example. ConstantExpression constant = GetConstant(member.Type, queryFilter.Value); // With these two, now I can build the expression // every operator has it one way to call, so the switch will do. switch (queryFilter.Operator) { case Operator.Equals: return Expression.Equal(member, constant); case Operator.Contains: return Expression.Call(member, ContainsMethod, constant); case Operator.GreaterThan: return Expression.GreaterThan(member, constant); case Operator.GreaterThanOrEqual: return Expression.GreaterThanOrEqual(member, constant); case Operator.LessThan: return Expression.LessThan(member, constant); case Operator.LessThanOrEqualTo: return Expression.LessThanOrEqual(member, constant); case Operator.StartsWith: return Expression.Call(member, StartsWithMethod, constant); case Operator.EndsWith: return Expression.Call(member, EndsWithMethod, constant); } return null; } For two filters: It returns the BinaryExpresion instance instead of the simple Expression. private static BinaryExpression GetExpression(ParameterExpression param, QueryFilter filter1, QueryFilter filter2) { // Built two separated expression and join them after. Expression result1 = GetExpression(param, filter1); Expression result2 = GetExpression(param, filter2); return Expression.AndAlso(result1, result2); }