internal static IQueryable Build(IQueryable query, IEnumerable <Tuple <Sort, LambdaExpression> > sorts) { bool then = false; foreach (var state in sorts) { var lambda = state.Item2; string name = "Queryable"; if (!then) { name += "OrderBy"; then = true; } else { name += "ThenBy"; } if (state.Item1.SortType == SortType.Descending) { name += "Descending"; } query = (IQueryable)TypicalLinqMethods.GetMethod(name) .MakeGenericMethod(query.ElementType, lambda.ReturnType) .Invoke(null, new object[] { query, lambda }); } return(query); }
protected internal override Expression CreateExpression(MemberExpression member, WhereBuilderContext context) { if (Value == null) { return(null); } var value = Expression.Constant(Value, member.Type); if (Operator != StringOperator.Equal) { return(Expression.Call(member, TypicalLinqMethods.GetMethod("String" + Operator), value)); } else { return(Expression.Equal(member, value, true, null)); } }