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)); }
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); }
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)); }