private static object ProjectResult <TResult>(IEnumerable <TResult> items, SPModelQueryExecuteMode executeMode) { switch (executeMode) { case SPModelQueryExecuteMode.FirstOrDefault: case SPModelQueryExecuteMode.ElementAtOrDefault: return(items.FirstOrDefault()); case SPModelQueryExecuteMode.First: case SPModelQueryExecuteMode.ElementAt: return(items.First()); case SPModelQueryExecuteMode.SingleOrDefault: return(items.SingleOrDefault()); case SPModelQueryExecuteMode.Single: return(items.Single()); case SPModelQueryExecuteMode.Any: case SPModelQueryExecuteMode.All: return(items.Any()); default: return(items); } }
private SPModelParameterizedQuery(ParameterizedExpression expression, ISPModelManagerInternal manager) { SPModelQueryBuilder builder = SPModelQueryExpressionVisitor.Translate(expression, manager); this.Descriptor = builder.ModelType != null?SPModelDescriptor.Resolve(builder.ModelType) : manager.Descriptor; this.Expression = builder.Expression; this.TaxonomyFields = new ReadOnlyCollection <string>(builder.TaxonomyFields.ToArray()); this.expression = expression; this.executeMode = builder.ExecuteMode; this.emptyArray = Array.CreateInstance(this.Descriptor.ModelType, 0); if (builder.SelectExpression != null) { this.projector = ((Expression <ResultEvaluator>)builder.SelectExpression).Compile(); } else { this.projector = (ResultEvaluator)Delegate.CreateDelegate(typeof(ResultEvaluator), mOfType.MakeGenericMethod(this.Descriptor.ModelType)); } this.evaluators = new ReadOnlyDictionary <string, ParameterEvaluator>(builder.ParameterEvaluators); for (int i = 0; i < PIndexMax; i++) { parameterNames[i] = (string)builder.Parameters[i]; } if (builder.ModelType != null) { this.ContentTypeFilterExpression = builder.ContentTypeIds.Aggregate(Caml.False, (v, a) => v | Caml.OfContentType(a)); } if (!builder.SelectAllProperties) { List <string> properties = new List <string>(builder.SelectProperties); if (!properties.Contains(SPBuiltInFieldName.ContentTypeId)) { properties.Add(SPBuiltInFieldName.ContentTypeId); } this.SelectProperties = new ReadOnlyCollection <string>(properties); } }
private static object ProjectResultWithSelector <TSource, TResult>(IEnumerable <TSource> items, Func <TSource, TResult> selector, SPModelQueryExecuteMode executeMode) { return(ProjectResult(items.Select(selector), executeMode)); }