Esempio n. 1
0
        private object ExecuteInternal <U>(SPModelQueryExpressionTranslateResult result)
        {
            if (result.ExecuteMode == SPModelQueryExecuteMode.Count)
            {
                if (useOfficeSearch)
                {
                    return(Math.Max(0, manager.GetCount <U>(result.Expression, keywords, keywordInclusion) - result.Offset));
                }
                return(Math.Max(0, manager.GetCount <U>(result.Expression) - result.Offset));
            }
            if (result.ExecuteMode == SPModelQueryExecuteMode.All)
            {
                result.Expression = ~result.Expression;
            }

            IEnumerable <U> items;

            if (useOfficeSearch)
            {
                int dummy;
                items = manager.GetItems <U>(result.Expression, (uint)result.Limit, (uint)result.Offset, keywords, null, keywordInclusion, out dummy);
            }
            else
            {
                items = manager.GetItems <U>(result.Expression, (uint)result.Limit, (uint)result.Offset);
            }
            if (result.SelectExpression != null && result.ExecuteMode != SPModelQueryExecuteMode.Any && result.ExecuteMode != SPModelQueryExecuteMode.All)
            {
                Delegate selector = result.SelectExpression.Compile();
                return(typeof(SPModelQueryProvider <T>).GetMethod("ProjectResultWithSelector", true).MakeGenericMethod(typeof(U), selector.Method.ReturnType).Invoke <object>(null, items, selector, result.ExecuteMode));
            }
            return(ProjectResult(items, result.ExecuteMode));
        }
Esempio n. 2
0
        public override object Execute(Expression expression)
        {
            SPModelQueryExpressionTranslateResult result = Translate(expression);

            if (result.ModelType != null && result.ModelType != typeof(T))
            {
                return(typeof(SPModelQueryProvider <T>).GetMethod("ExecuteInternal", true).MakeGenericMethod(result.ModelType).Invoke <object>(this, result));
            }
            return(ExecuteInternal <T>(result));
        }