コード例 #1
0
        private Tuple <string, IList <TDbParameter> > GenerateInCondition(InFilterTerm term)
        {
            var clause       = string.Empty;
            var parameters   = new List <TDbParameter>();
            var fieldName    = GetColumnName(term.PropertyName);
            var containsNull = false;

            foreach (var item in term.Value)
            {
                if (item == null)
                {
                    containsNull = true;
                }
                else
                {
                    var paramName = GetParameterName();
                    parameters.Add(GetDbParameter(paramName, item));
                    clause += $"{paramName},";
                }
            }

            clause = $"{fieldName} IN ({clause.TrimEnd(',')})";

            if (containsNull)
            {
                clause = $"({fieldName} IS NULL OR {clause})";
            }

            return(new Tuple <string, IList <TDbParameter> >(clause, parameters));
        }
コード例 #2
0
        public void ConstructInFilterTerm()
        {
            var name   = Guid.NewGuid().ToString();
            var values = new object[] { 2, 4, 6, 8, 10 };
            var term   = new InFilterTerm(name, values.ToArray());

            Assert.Equal(name, term.PropertyName);
            Assert.Equal(FilterOperators.In, term.Operator);
            Assert.Equal(values, term.Value);
        }
コード例 #3
0
        private InFilterTerm ConvertToTypedTerm(InFilterTerm term)
        {
            var field = term.PropertyName.ToLower();

            if (!_typeMembers.ContainsKey(field))
            {
                throw new InvalidOperationException($"No public member on {Type} called {field} - case insensitive search");
            }

            var member   = _typeMembers[field];
            var inValues = term.Value
                           .Select(s => StringConverter.FromString((string)s, member.Type));

            return(new InFilterTerm(member.Name, inValues));
        }