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)); }
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)); }