private FilterInfo GetOneFilterInfo(List <FilterInfo> filterInfos) { var trimItems = filterInfos.TrimNotNull().ToArray(); return(trimItems.Length switch { 0 => null, 1 => trimItems.First(), _ => FilterInfo.CreateAnd(trimItems) });
public void ShouldReturnStringExpressionWhenToString() { var filter = FilterInfo.CreateOr( FilterInfo.CreateAnd( new FilterInfo("Age", FilterType.GreaterThan, 1), new FilterInfo("Name", FilterType.StartsWith, "Zhang")), FilterInfo.CreateAnd( new FilterInfo("Id", FilterType.In, new[] { 1, 3, 4 }), new FilterInfo("Tel", FilterType.Contains, "135"))); Assert.AreEqual("((Age > 1) and (Name starts \"Zhang\")) or ((Id in [1,3,4]) and (Tel contains \"135\"))", filter.ToString()); Assert.AreEqual("((Age <= 1) or (Name not starts \"Zhang\")) and ((Id not in [1,3,4]) or (Tel not contains \"135\"))", filter.Not().ToString()); }
public void ShouldAppendItemsWhenAndAlsoAndGivenOpTypeIsAndItemsAndOtherOpTypeIsAndItems() { var filter = FilterInfo.CreateItem("Age", FilterType.GreaterThan, 1) .AndAlso("Name", FilterType.StartsWith, "Zhang"); Assert.AreEqual(OpType.AndItems, filter.OpType); Assert.AreEqual(2, filter.Items.Count); var otherAndItems = FilterInfo.CreateAnd( new FilterInfo("Id", FilterType.StartsWith, "0"), new FilterInfo("Tel", FilterType.Contains, "135")); filter.AndAlso(otherAndItems); Assert.AreEqual(OpType.AndItems, filter.OpType); Assert.AreEqual(4, filter.Items.Count); }
public override Expression ConvertValue(Expression p, PropertyInfo propInfo, object value, List <FilterInfo> subFilters) { var trimFilters = subFilters.TrimNotNull().ToList(); if (trimFilters.Count == 0) { var(_, propType) = propInfo.PropertyType.GetUnderlyingTypeTypeInfo(); var subType = propType.GetEnumerableSubType(); return(Expression.Call(AnyMethod0.MakeGenericMethod(subType), Expression.Property(p, propInfo))); } if (trimFilters.Count == 1) { return(CreateAnyMethod1Expression(p, propInfo, trimFilters.First())); } else { return(CreateAnyMethod1Expression(p, propInfo, FilterInfo.CreateAnd(trimFilters.ToArray()))); } }
public void ShouldConvertToStringAndConvertFromString() { var filter = FilterInfo.CreateOr( FilterInfo.CreateAnd( new FilterInfo("Age", FilterType.GreaterThan, 1), new FilterInfo("Name", FilterType.StartsWith, "Zhang")), FilterInfo.CreateAnd( new FilterInfo("Id", FilterType.StartsWith, "0"), new FilterInfo("Tel", FilterType.Contains, "135"))); var converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(FilterInfo)); Assert.IsTrue(converter.CanConvertTo(typeof(string))); Assert.IsTrue(converter.CanConvertFrom(typeof(string))); var plainText = converter.ConvertTo(filter, typeof(string)) as string; Assert.IsNotNull(plainText); var filter2 = converter.ConvertFrom(plainText) as FilterInfo; Assert.AreEqual(OpType.OrItems, filter2.OpType); Assert.AreEqual(2, filter2.Items.Count); }