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); } }
public void EvaluateCount(int index, bool isMissPress) { grm.CurrentLife += isMissPress ? evapoint[4] * (5 - index) / 8 : evapoint[4 - index]; grm.GainScore((MarkEvaluateType)(4 - index), isMissPress); grm.Evacount[4 - index]++; float sum = 0; foreach (int count in grm.Evacount) { sum += count; } float ratio = ((float)(grm.Evacount[0] + grm.Evacount[1]) / sum - 0.7f) / 0.3f; if (ratio <= 0) { ratio = 0; } if (ratio >= 1) { ratio = 1; } cgi.ChangeEvaluate((MarkEvaluateType)(4 - index), isMissPress, grm.CurrentLifeAsFloat, ratio, ResultEvaluator.Evaluate(grm.Evacount)); cgi.ChangeScore(grm.CurrentScore); }