public ParameterizedExpression Visit(Expression expression, out object[] args) { Expression body = Visit(expression); Type genericType = parameters.Count < builtInFuncTypes.Length ? builtInFuncTypes[parameters.Count] : funcTypes.EnsureKeyValue(parameters.Count, CreateGenericFuncType); Type funcType = genericType.MakeGenericType(parameters.Select(v => v.Type).Concat(new[] { body.Type }).ToArray()); args = arguments.ToArray(); return(new ParameterizedExpression(Expression.Lambda(funcType, body, parameters.ToArray()), hashCode)); }
public static ICamlParameterBinding GetValueBinding(SPSite parentSite, SPFieldType fieldType, string fieldTypeAsString, bool includeTimeValue, Type memberType, CamlParameterName parameterName, PropertyInfo property) { Type valueType = memberType.GetEnumeratedType() ?? memberType; CamlParameterValueBinder binder = null; if (property != null) { binder = propertyBinders.EnsureKeyValue(property, CreateBinderFromPropertyInfo); } switch (fieldType) { case SPFieldType.Boolean: return(new CamlParameterBindingBoolean(parameterName, binder)); case SPFieldType.DateTime: return(new CamlParameterBindingDateTime(parameterName, binder, includeTimeValue)); case SPFieldType.Guid: return(new CamlParameterBindingGuid(parameterName, binder)); case SPFieldType.Counter: case SPFieldType.Integer: return(new CamlParameterBindingInteger(parameterName, binder)); case SPFieldType.Currency: case SPFieldType.Number: return(new CamlParameterBindingNumber(parameterName, binder)); case SPFieldType.Lookup: case SPFieldType.User: if (valueType.IsOf <SPModel>()) { return(new CamlParameterBindingLookup(parameterName, bindSPModelID)); } if (valueType.IsOf <int>()) { return(new CamlParameterBindingLookup(parameterName, binder)); } if (valueType.IsOf <SPPrincipal>()) { return(new CamlParameterBindingLookup(parameterName, bindSPPrincipalID)); } if (valueType.IsOf <SPListItem>()) { return(new CamlParameterBindingLookup(parameterName, bindSPListItemID)); } if (valueType.IsOf <Guid>()) { return(new CamlParameterBindingGuid(parameterName, binder)); } break; case SPFieldType.URL: return(new CamlParameterBindingUrl(parameterName, binder)); case SPFieldType.Choice: if (memberType.IsEnum) { return(new CamlParameterBindingString(parameterName, enumBinder.EnsureKeyValue(memberType, CreateBinderFromEnumType))); } break; case SPFieldType.ModStat: return(new CamlParameterBindingModStat(parameterName, binder)); } switch (fieldTypeAsString) { case "TaxonomyFieldType": case "TaxonomyFieldTypeMulti": if (valueType.IsOf <int>()) { return(new CamlParameterBindingLookup(parameterName, binder)); } if (valueType.IsOf <Guid>()) { return(new CamlParameterBindingLookup(parameterName, bindTermWssIdFromGuid)); } if (valueType.IsOf <Term>()) { return(new CamlParameterBindingLookup(parameterName, bindTermWssId)); } break; } return(new CamlParameterBindingString(parameterName, binder)); }