예제 #1
0
 protected CamlFieldRef GetFieldRef(string fieldName, out FieldType dataType)
 {
     dataType = Microsoft.SharePoint.Client.FieldType.Invalid;
     if (SpQueryArgs != null && !string.IsNullOrEmpty(fieldName))
     {
         if (SpQueryArgs.FieldMappings.ContainsKey(fieldName))
         {
             var fieldMap = SpQueryArgs.FieldMappings[fieldName];
             var fieldRef = new CamlFieldRef()
             {
                 Name = fieldMap.Name
             };
             if (fieldMap is LookupFieldAttribute)
             {
                 if ((fieldMap as LookupFieldAttribute).Result == LookupItemResult.Id)
                 {
                     fieldRef.LookupId = true;
                 }
             }
             dataType = fieldMap.DataType;
             return(fieldRef);
         }
         else
         {
             throw new Exception($"Cannot find '{fieldName}' mapping field. Check '{typeof(FieldAttribute)}'.");
         }
     }
     return(null);
 }
예제 #2
0
        protected override Expression VisitBinary(BinaryExpression exp)
        {
            LeftOperator  = ToOperator(exp.Left);
            RightOperator = ToOperator(exp.Right);
            FieldType    dataType;
            CamlFieldRef fieldRef = GetFieldRef(out dataType);
            CamlValue    value    = GetValue(dataType);

            if (fieldRef == null)
            {
                return(exp);
            }
            switch (exp.NodeType)
            {
            case ExpressionType.Equal:
                if (exp.Right.IsNullValue())
                {
                    Operator = new Caml.Operators.IsNull(fieldRef);
                }
                else
                {
                    Operator = new Caml.Operators.Eq(fieldRef, value);
                }
                break;

            case ExpressionType.NotEqual:
                if (exp.Right.IsNullValue())
                {
                    Operator = new Caml.Operators.IsNotNull(fieldRef);
                }
                else
                {
                    Operator = new Caml.Operators.Neq(fieldRef, value);
                }
                break;

            case ExpressionType.GreaterThan:
                Operator = new Caml.Operators.Gt(fieldRef, value);
                break;

            case ExpressionType.GreaterThanOrEqual:
                Operator = new Caml.Operators.Geq(fieldRef, value);
                break;

            case ExpressionType.LessThan:
                Operator = new Caml.Operators.Lt(fieldRef, value);
                break;

            case ExpressionType.LessThanOrEqual:
                Operator = new Caml.Operators.Leq(fieldRef, value);
                break;

            //case ExpressionType.Convert:
            //    Visit(exp);
            //    break;
            default:
                throw new NotSupportedException($"{exp.NodeType} operator is not supported in LinqToSP.");
            }
            return(exp);
        }
예제 #3
0
 protected FieldValueOperator(string operatorName, Guid fieldId, T value, FieldType type)
     : base(operatorName, value, type)
 {
     FieldRef = new CamlFieldRef {
         Id = fieldId
     };
 }
예제 #4
0
 protected FieldValueOperator(string operatorName, string fieldName, T value, FieldType type)
     : base(operatorName, value, type)
 {
     FieldRef = new CamlFieldRef {
         Name = fieldName
     };
 }
예제 #5
0
 protected FieldValueOperator(string operatorName, string fieldName, CamlValue <T> value)
     : base(operatorName, value)
 {
     FieldRef = new CamlFieldRef {
         Name = fieldName
     };
 }
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            if ((node.Method.Name == "IsMembership") && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                Visit(node.Object);
                foreach (var arg in node.Arguments)
                {
                    if (arg.NodeType == ExpressionType.Constant || arg.NodeType == ExpressionType.Lambda)
                    {
                        Visit(arg);
                    }
                }

                FieldType    dataType;
                CamlFieldRef fieldRef = GetFieldRef(out dataType);

                if (fieldRef == null || FieldValue == null)
                {
                    return(node);
                }

                Operator = new Membership(fieldRef, (MembershipType)FieldValue);
                return(node);
            }
            throw new NotSupportedException($"{node.NodeType} method is not supported in LinqToSP.");
        }
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            if ((node.Method.Name == "LookupIncludes" || node.Method.Name == "LookupIdIncludes") && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                Visit(node.Object);
                foreach (var arg in node.Arguments)
                {
                    if (arg.NodeType == ExpressionType.Constant || arg.NodeType == ExpressionType.Lambda)
                    {
                        Visit(arg);
                    }
                }

                FieldType    dataType;
                CamlFieldRef fieldRef = GetFieldRef(out dataType);
                CamlValue    value    = GetValue(dataType);
                if (fieldRef == null || value == null)
                {
                    return(node);
                }
                if (node.Method.Name == "LookupIdIncludes")
                {
                    fieldRef.LookupId = true;
                }
                Operator = new Caml.Operators.Includes(fieldRef, value);
                return(node);
            }
            throw new NotSupportedException($"{node.NodeType} method is not supported in LinqToSP.");
        }
예제 #8
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            if (node.Method.Name == "DateRangesOverlap" && typeof(ListItemEntityExtensions).IsAssignableFrom(node.Method.DeclaringType))
            {
                Visit(node.Object);
                foreach (var arg in node.Arguments)
                {
                    if (arg.NodeType == ExpressionType.Constant || arg.NodeType == ExpressionType.Lambda)
                    {
                        Visit(arg);
                    }
                }

                FieldType    dataType;
                CamlFieldRef startTimeFieldRef      = GetFieldRef(StartTimeFieldName, out dataType);
                CamlFieldRef endTimeFieldRef        = GetFieldRef(EndTimeFieldName, out dataType);
                CamlFieldRef recurrenceDataFieldRef = GetFieldRef(RecurrenceDataFieldName, out dataType);
                CamlValue    value = GetValue(Microsoft.SharePoint.Client.FieldType.DateTime);
                value.IncludeTimeValue = null;

                if (startTimeFieldRef == null || endTimeFieldRef == null || recurrenceDataFieldRef == null || value == null)
                {
                    return(node);
                }

                Operator = new Caml.Operators.DateRangesOverlap(startTimeFieldRef, endTimeFieldRef, recurrenceDataFieldRef, value);
                return(node);
            }
            throw new NotSupportedException($"{node.NodeType} method is not supported in LinqToSP.");
        }
 protected FieldCamlMultiValue(string operatorName, Guid fieldId, IEnumerable <CamlValue <T> > values)
     : base(operatorName, values)
 {
     FieldRef = new CamlFieldRef {
         Id = fieldId
     };
 }
예제 #10
0
 protected FieldCamlMultiValue(string operatorName, string fieldName, IEnumerable <CamlValue <T> > values)
     : base(operatorName, values)
 {
     FieldRef = new CamlFieldRef {
         Name = fieldName
     };
 }
예제 #11
0
 protected FieldValueOperator(string operatorName, Guid fieldId, CamlValue <T> value)
     : base(operatorName, value)
 {
     FieldRef = new CamlFieldRef {
         Id = fieldId
     };
 }
예제 #12
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            Expression expression = node;

            if (node.Method.Name == "Equals")
            {
                foreach (var arg in node.Arguments)
                {
                    Visit(arg);
                }

                FieldType    dataType;
                CamlFieldRef fieldRef = GetFieldRef(out dataType);
                CamlValue    value    = GetValue(dataType);

                Operator = new Caml.Operators.Eq(fieldRef, value);
            }
            else if (node.Method.Name == "NotEquals")
            {
                Visit(node.Object);
                foreach (var arg in node.Arguments)
                {
                    Visit(arg);
                }

                FieldType    dataType;
                CamlFieldRef fieldRef = GetFieldRef(out dataType);
                CamlValue    value    = GetValue(dataType);

                Operator = new Caml.Operators.Neq(fieldRef, value);
                //return null;
            }
            return(expression);
        }
예제 #13
0
 protected FieldCamlMultiValue(string operatorName, string fieldName, IEnumerable <T> values,
                               FieldType type)
     : base(operatorName, values, type)
 {
     FieldRef = new CamlFieldRef {
         Name = fieldName
     };
 }
예제 #14
0
 protected FieldCamlMultiValue(string operatorName, Guid fieldId, IEnumerable <T> values,
                               FieldType type)
     : base(operatorName, values, type)
 {
     FieldRef = new CamlFieldRef {
         Id = fieldId
     };
 }
예제 #15
0
 protected override void OnParsing(XElement existingFieldValueOperator)
 {
     var existingFieldRef = existingFieldValueOperator.ElementIgnoreCase(CamlFieldRef.FieldRefTag);
     if (existingFieldRef != null)
     {
         FieldRef = new CamlFieldRef(existingFieldRef);
     }
 }
예제 #16
0
        protected override void OnParsing(XElement existingFieldValueOperator)
        {
            var existingFieldRef = existingFieldValueOperator.ElementIgnoreCase(CamlFieldRef.FieldRefTag);

            if (existingFieldRef != null)
            {
                FieldRef = new CamlFieldRef(existingFieldRef);
            }
        }
예제 #17
0
 protected FieldOperator(string operatorName, CamlFieldRef fieldRef)
     : base(operatorName)
 {
     if (fieldRef == null)
     {
         throw new ArgumentNullException("fieldRef");
     }
     FieldRef = fieldRef;
 }
예제 #18
0
        protected override void OnParsing(XElement existingSingleFieldMultipleValueOperator)
        {
            var existingValues = existingSingleFieldMultipleValueOperator.ElementIgnoreCase(ValuesTag);

            if (existingValues != null)
            {
                base.OnParsing(existingValues);
            }
            var existingFieldRef = existingSingleFieldMultipleValueOperator.ElementIgnoreCase(CamlFieldRef.FieldRefTag);

            if (existingFieldRef != null)
            {
                FieldRef = new CamlFieldRef(existingFieldRef);
            }
        }
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            if (node.Method.Name == "StartsWith")
            {
                Visit(node.Object);
                foreach (var arg in node.Arguments)
                {
                    Visit(arg);
                }

                FieldType    dataType;
                CamlFieldRef fieldRef = GetFieldRef(out dataType);
                CamlValue    value    = GetValue(dataType);
                if (fieldRef == null)
                {
                    return(node);
                }

                Operator = new Caml.Operators.BeginsWith(fieldRef, value);
                return(node);
            }
            throw new NotSupportedException($"{node.NodeType} method is not supported in LinqToSP.");
        }
예제 #20
0
 public In(CamlFieldRef fieldRef, IEnumerable <CamlValue <object> > values) : base(fieldRef, values)
 {
 }
예제 #21
0
 public CamlOrderBy(CamlFieldRef fieldRef)
     : this(new[] {fieldRef})
 {
 }
예제 #22
0
 protected FieldValueOperator(string operatorName, CamlFieldRef fieldRef, CamlValue <T> value)
     : base(operatorName, value)
 {
     FieldRef = fieldRef;
 }
예제 #23
0
 protected FieldValueOperator(string operatorName, CamlFieldRef fieldRef, T value, FieldType type)
     : base(operatorName, value, type)
 {
     FieldRef = fieldRef;
 }
예제 #24
0
 protected FieldCamlMultiValue(string operatorName, CamlFieldRef fieldRef, IEnumerable <CamlValue <T> > values)
     : base(operatorName, values)
 {
     FieldRef = fieldRef;
 }
예제 #25
0
 protected FieldCamlMultiValue(string operatorName, CamlFieldRef fieldRef, IEnumerable <T> values,
                               FieldType type)
     : base(operatorName, values, type)
 {
     FieldRef = fieldRef;
 }
예제 #26
0
 public Lt(CamlFieldRef fieldRef, object value, FieldType type)
     : base(fieldRef, value, type)
 {
 }
예제 #27
0
 public Lt(CamlFieldRef fieldRef, CamlValue <object> value) : base(fieldRef, value)
 {
 }
예제 #28
0
 public IsNotNull(CamlFieldRef fieldRef)
     : base(IsNotNullTag, fieldRef)
 {
 }
예제 #29
0
 public DateRangesOverlap(CamlFieldRef startField, CamlFieldRef endField, CamlFieldRef recurrenceIdField,
                          CamlValue value)
     : base(DateRangesOverlapTag, new[] { startField, endField, recurrenceIdField }, value, FieldType.DateTime)
 {
 }
예제 #30
0
 public IsNotNull(CamlFieldRef fieldRef)
     : base(IsNotNullTag, fieldRef)
 {
 }
예제 #31
0
 public Contains(CamlFieldRef fieldRef, CamlValue <string> value)
     : base(fieldRef, value)
 {
 }
예제 #32
0
 public Contains(CamlFieldRef fieldRef, string value)
     : base(fieldRef, value, FieldType.Text)
 {
 }
예제 #33
0
 public CamlGroupBy(CamlFieldRef fieldRef, bool? collapse = null, int? limit = 30)
     : this(new[] { fieldRef }, collapse, limit)
 {
 }
예제 #34
0
 public In(CamlFieldRef fieldRef, IEnumerable <object> values, FieldType type)
     : base(fieldRef, values, type)
 {
 }
예제 #35
0
 protected FieldOperator(string operatorName, CamlFieldRef fieldRef)
     : base(operatorName)
 {
     if (fieldRef == null) throw new ArgumentNullException(nameof(fieldRef));
     FieldRef = fieldRef;
 }
예제 #36
0
 public Membership(CamlFieldRef fieldRef, MembershipType membershipType)
     : base(MembershipTag, fieldRef)
 {
     MembershipType = membershipType;
 }