コード例 #1
0
            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));
            }
コード例 #2
0
        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));
        }