示例#1
0
        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);
        }
示例#2
0
        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);
        }