private static MethodInfo GetOrderByMethod(bool isThenBy, bool isDesc, Type elementType, Type nextExprType) { MethodInfo orderByMethod; if (isThenBy) { orderByMethod = isDesc ? TypeFns.GetMethodByExample( (IOrderedQueryable <String> q) => q.ThenByDescending(s => s.Length), elementType, nextExprType) : TypeFns.GetMethodByExample( (IOrderedQueryable <String> q) => q.ThenBy(s => s.Length), elementType, nextExprType); } else { orderByMethod = isDesc ? TypeFns.GetMethodByExample( (IQueryable <String> q) => q.OrderByDescending(s => s.Length), elementType, nextExprType) : TypeFns.GetMethodByExample( (IQueryable <String> q) => q.OrderBy(s => s.Length), elementType, nextExprType); } return(orderByMethod); }
public static Func <IQueryable, IQueryable> BuildSelectFunc(Type elementType, List <String> selectClauses) { var propSigs = selectClauses.Select(sc => new PropertySignature(elementType, sc)).ToList(); var dti = DynamicTypeInfo.FindOrCreate(propSigs.Select(ps => ps.Name), propSigs.Select(ps => ps.ReturnType)); var lambdaExpr = CreateNewLambda(dti, propSigs); var method = TypeFns.GetMethodByExample((IQueryable <String> q) => q.Select(s => s.Length), elementType, dti.DynamicType); var func = BuildIQueryableFunc(elementType, method, lambdaExpr); return(func); }