public override FilterNode <TValue>?Visit(LogicalFilter <TValue> nodeIn, None args) { var pruned = new List <FilterNode <TValue> >(nodeIn.Filters.Count); foreach (var filter in nodeIn.Filters) { var transformed = filter.Accept(this, None.Value); if (transformed != null) { pruned.Add(transformed); } } if (pruned.Count == 1) { return(pruned[0]); } if (pruned.Count == 0) { return(null); } return(nodeIn with { Filters = pruned }); }
public override FilterDefinition <T> Visit(LogicalFilter <ClrValue> nodeIn, None args) { if (nodeIn.Type == LogicalFilterType.And) { return(Filter.And(nodeIn.Filters.Select(x => x.Accept(this, args)))); } else { return(Filter.Or(nodeIn.Filters.Select(x => x.Accept(this, args)))); } }
public async Task <Result <GuideDescription[]> > SearchByTagsAsync(string[] tags, int take = 50, int skip = 0) { IFilter filter = null; if (tags != null) { var filters = tags.Select(x => (IFilter) new ComparisonFilter("tags", x, ComparisonOperator.Contains)) .ToArray(); filter = new LogicalFilter(LogicalOperator.And, filters); } var guides = await guideRepository.SearchAsync(filter, take, skip); return(Result <GuideDescription[]> .Success(MapGuideDescriptions(guides))); }
public override FilterNode <TValue>?Visit(LogicalFilter <TValue> nodeIn, TArgs args) { var pruned = new List <FilterNode <TValue> >(nodeIn.Filters.Count); foreach (var inner in nodeIn.Filters) { var transformed = inner.Accept(this, args); if (transformed != null) { pruned.Add(transformed); } } return(new LogicalFilter <TValue>(nodeIn.Type, pruned)); }
// shows how to combine filters using logical And private void menuItemLogicalFilter_Click(object sender, System.EventArgs e) { try { Feature fChicago = _catalog.SearchForFeature("uscty_1k", MapInfo.Data.SearchInfoFactory.SearchWhere("City='Chicago'")); // build up a search info by hand (not using the factory) Distance d1 = new Distance(35, DistanceUnit.Mile); Distance d2 = new Distance(125, DistanceUnit.Mile); QueryFilter filterA = new MyCustomFilter(fChicago.Geometry, d1, d2); // build up a search info by hand (not using the factory) QueryFilter filterB = new SqlExpressionFilter("State='IL'"); QueryFilter filter = new LogicalFilter(LogicalOperation.And, filterA, filterB); QueryDefinition qd = new QueryDefinition(filter, "*"); SearchInfo si = new SearchInfo(null, qd); IResultSetFeatureCollection fc = _catalog.Search("uscty_1k", si); // set map view to show search results _map.SetView(fc.Envelope); // make a search geometry to show what we are doing FeatureGeometry buffer1 = fChicago.Geometry.Buffer(d1.Value, d1.Unit, 20, DistanceType.Spherical); FeatureGeometry buffer2 = fChicago.Geometry.Buffer(d2.Value, d2.Unit, 20, DistanceType.Spherical); ShowSearchGeometry(buffer1); ShowSearchGeometry(buffer2, false); Feature fIL = _catalog.SearchForFeature("usa", MapInfo.Data.SearchInfoFactory.SearchWhere("State='IL'")); ShowSearchGeometry(fIL.Geometry, false); // show results as selection SelectFeatureCollection(fc); } finally { Cursor.Current = Cursors.Default; } }
protected override FilterNode <IJsonValue> ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { if (reader.TokenType != JsonToken.StartObject) { throw new JsonException($"Expected StartObject, but got {reader.TokenType}."); } FilterNode <IJsonValue> result = null; var comparePath = (PropertyPath)null; var compareOperator = (CompareOperator)99; var compareValue = (IJsonValue)null; while (reader.Read()) { switch (reader.TokenType) { case JsonToken.PropertyName: string propertyName = reader.Value.ToString(); if (!reader.Read()) { throw new JsonSerializationException("Unexpected end when reading filter."); } if (result != null) { throw new JsonSerializationException($"Unexpected property {propertyName}"); } switch (propertyName.ToLowerInvariant()) { case "not": var filter = serializer.Deserialize <FilterNode <IJsonValue> >(reader); result = new NegateFilter <IJsonValue>(filter); break; case "and": var andFilters = serializer.Deserialize <List <FilterNode <IJsonValue> > >(reader); result = new LogicalFilter <IJsonValue>(LogicalFilterType.And, andFilters); break; case "or": var orFilters = serializer.Deserialize <List <FilterNode <IJsonValue> > >(reader); result = new LogicalFilter <IJsonValue>(LogicalFilterType.Or, orFilters); break; case "path": comparePath = serializer.Deserialize <PropertyPath>(reader); break; case "op": compareOperator = ReadOperator(reader, serializer); break; case "value": compareValue = serializer.Deserialize <IJsonValue>(reader); break; } break; case JsonToken.Comment: break; case JsonToken.EndObject: if (result != null) { return(result); } if (comparePath == null) { throw new JsonSerializationException("Path not defined."); } if (compareValue == null && compareOperator != CompareOperator.Empty) { throw new JsonSerializationException("Value not defined."); } if (!compareOperator.IsEnumValue()) { throw new JsonSerializationException("Operator not defined."); } return(new CompareFilter <IJsonValue>(comparePath, compareOperator, compareValue ?? JsonValue.Null)); } } throw new JsonSerializationException("Unexpected end when reading filter."); }
protected void btnFilter_Click(object sender, EventArgs e) { var flogical = new LogicalFilter(); //-----Selection filter if (ddSelect.SelectedIndex != 0) { if (ddSelect.SelectedIndex == 2) { if (_selectionFilter != null) { _selectionFilter.IncludeValues = !_selectionFilter.IncludeValues; } else { _selectionFilter = null; } } flogical.AddFilter(_selectionFilter); } //----OrderID filter if (!string.IsNullOrEmpty(txtOrderID.Text)) { flogical.AddLogicalOperation("AND"); flogical.AddFilter(new EqualFieldFilter { Value = txtOrderID.Text.TryParseInt().ToString(), ParamName = "@OrderId" }); } _paging.Fields["ID"].Filter = flogical.FilterCount() > 0 ? flogical : null; //----Status filter var stFilter = new CompareFieldFilter(); if (!string.IsNullOrEmpty(ddlStatusName.SelectedValue)) { if (!OrderService.GetOrderStatuses(true).Any(item => item.Key.ToLower() == ddlStatusName.SelectedValue)) { ddlStatusName.Items.Remove(ddlStatusName.SelectedValue); ddlStatusName.SelectedValue = string.Empty; } else if (ddlStatusName.SelectedIndex != 0) { stFilter.ParamName = "@StatusName"; stFilter.Expression = ddlStatusName.SelectedValue; _paging.Fields["StatusName"].Filter = stFilter; } else { _paging.Fields["StatusName"].Filter = null; } } else { _paging.Fields["StatusName"].Filter = null; } //----Sum filter var sumFilter = new RangeFieldFilter { ParamName = "@Sum" }; try { int priceFrom = 0; sumFilter.From = int.TryParse(txtSumFrom.Text, out priceFrom) ? priceFrom : 0; } catch (Exception) { } try { int priceTo = 0; sumFilter.To = int.TryParse(txtSumTo.Text, out priceTo) ? priceTo : int.MaxValue; } catch (Exception) { } _paging.Fields["Sum"].Filter = sumFilter.From.HasValue || sumFilter.To.HasValue ? sumFilter : null; //---- Name filter _paging.Fields["BuyerName"].Filter = !string.IsNullOrEmpty(txtBuyerName.Text) ? new CompareFieldFilter { ParamName = "@BuyerName", Expression = txtBuyerName.Text } : null; //---- Billing Name filter _paging.Fields["BillingName"].Filter = !string.IsNullOrEmpty(txtBillingName.Text) ? new CompareFieldFilter { ParamName = "@BillingName", Expression = txtBillingName.Text } : null; _paging.Fields["PaymentMethod"].Filter = ddlPaymentMethod.SelectedValue != "any" ? new EqualFieldFilter { ParamName = "@PaymentMethod", Value = ddlPaymentMethod.SelectedValue } : null; _paging.Fields["ShippingMethodName"].Filter = ddlShippingMethod.SelectedValue != "any" ? new EqualFieldFilter { ParamName = "@ShippingMethodName", Value = ddlShippingMethod.SelectedValue } : null; _paging.Fields["PaymentDate"].Filter = ddlPayed.SelectedValue != "any" ? ddlPayed.SelectedValue == "yes" ? new NullFieldFilter { ParamName = "@PaymentDate", Null = false } : new NullFieldFilter { ParamName = "@PaymentDate", Null = true } : null; //---OrderDate filter var dfilter = new DateTimeRangeFieldFilter { ParamName = "@dateOrdSearch" }; if (!string.IsNullOrEmpty(txtDateFrom.Text)) { DateTime?d = null; try { d = DateTime.Parse(txtDateFrom.Text); } catch (Exception) { } if (d.HasValue) { var dt = new DateTime(d.Value.Year, d.Value.Month, d.Value.Day, 0, 0, 0, 0); dfilter.From = dt; } } if (!string.IsNullOrEmpty(txtDateTo.Text)) { DateTime?d = null; try { d = DateTime.Parse(txtDateTo.Text); } catch (Exception) { } if (d.HasValue) { var dt = new DateTime(d.Value.Year, d.Value.Month, d.Value.Day, 23, 59, 59, 99); dfilter.To = dt; } } if (dfilter.From.HasValue || dfilter.To.HasValue) { _paging.Fields["OrderDate"].Filter = dfilter; } else { _paging.Fields["OrderDate"].Filter = null; } pageNumberer.CurrentPageIndex = 1; _paging.CurrentPageIndex = 1; }
protected void Page_Load(object sender, EventArgs e) { _paging = new SqlPaging { TableName = "[Catalog].[Product] LEFT JOIN [Catalog].[Offer] ON [Product].[ProductID] = [Offer].[ProductID] inner join Catalog.ProductCategories on ProductCategories.ProductId = [Product].[ProductID] Left JOIN [Catalog].[ProductPropertyValue] ON [Product].[ProductID] = [ProductPropertyValue].[ProductID] LEFT JOIN [Catalog].[ShoppingCart] ON [Catalog].[ShoppingCart].[OfferID] = [Catalog].[Offer].[OfferID] AND [Catalog].[ShoppingCart].[ShoppingCartType] = 3 AND [ShoppingCart].[CustomerID] = @CustomerId Left JOIN [Catalog].[Ratio] on Product.ProductId= Ratio.ProductID and Ratio.CustomerId=@CustomerId" }; _paging.AddFieldsRange( new List <Field> { new Field { Name = "[Product].[ProductID]", IsDistinct = true }, //new Field {Name = "PhotoName AS Photo"}, new Field { Name = "(CASE WHEN Offer.ColorID is not null THEN (Select Count(PhotoName) From [Catalog].[Photo] WHERE ([Photo].ColorID = Offer.ColorID or [Photo].ColorID is null) and [Product].[ProductID] = [Photo].[ObjId] and Type=@Type) ELSE (Select Count(PhotoName) From [Catalog].[Photo] WHERE [Product].[ProductID] = [Photo].[ObjId] and Type=@Type) END) AS CountPhoto" }, new Field { Name = "(CASE WHEN Offer.ColorID is not null THEN (Select TOP(1) PhotoName From [Catalog].[Photo] WHERE ([Photo].ColorID = Offer.ColorID or [Photo].ColorID is null) and [Product].[ProductID] = [Photo].[ObjId] and Type=@Type Order By main desc, [Photo].[PhotoSortOrder]) ELSE (Select TOP(1) PhotoName From [Catalog].[Photo] WHERE [Product].[ProductID] = [Photo].[ObjId] and Type=@Type AND [Photo].[Main] = 1) END) AS Photo" }, new Field { Name = "(CASE WHEN Offer.ColorID is not null THEN (Select TOP(1) [Photo].[Description] From [Catalog].[Photo] WHERE ([Photo].ColorID = Offer.ColorID or [Photo].ColorID is null) and [Product].[ProductID] = [Photo].[ObjId] and Type=@Type Order By main desc, [Photo].[PhotoSortOrder]) ELSE (Select TOP(1) [Photo].[Description] From [Catalog].[Photo] WHERE [Product].[ProductID] = [Photo].[ObjId] and Type=@Type AND [Photo].[Main] = 1) END) AS PhotoDesc" }, new Field { Name = "(select [Settings].[ProductColorsToString]([Product].[ProductID])) as Colors" }, //new Field {Name = "[Photo].[Description] AS PhotoDesc"}, new Field { Name = "[ProductCategories].[CategoryID]", NotInQuery = true }, new Field { Name = "BriefDescription" }, new Field { Name = "Product.ArtNo" }, new Field { Name = "Name" }, new Field { Name = "(CASE WHEN Price=0 THEN 0 ELSE 1 END) as TempSort", Sorting = SortDirection.Descending }, new Field { Name = "Recomended" }, new Field { Name = "Bestseller" }, new Field { Name = "New" }, new Field { Name = "OnSale" }, new Field { Name = "Discount" }, new Field { Name = "Offer.Main", NotInQuery = true }, new Field { Name = "Offer.OfferID" }, new Field { Name = "Offer.Amount" }, new Field { Name = "(CASE WHEN Offer.Amount=0 OR Offer.Amount < IsNull(MinAmount,0) THEN 0 ELSE 1 END) as TempAmountSort", Sorting = SortDirection.Descending }, new Field { Name = "MinAmount" }, new Field { Name = "MaxAmount" }, new Field { Name = "Enabled" }, new Field { Name = "AllowPreOrder" }, new Field { Name = "Ratio" }, new Field { Name = "RatioID" }, new Field { Name = "DateModified" }, new Field { Name = "ShoppingCartItemId" }, new Field { Name = "UrlPath" }, new Field { Name = "[ProductCategories].[SortOrder]" }, new Field { Name = "[ShoppingCart].[CustomerID]", NotInQuery = true }, new Field { Name = "BrandID", NotInQuery = true }, new Field { Name = "Offer.ProductID as Size_ProductID", NotInQuery = true }, new Field { Name = "Offer.ProductID as Color_ProductID", NotInQuery = true }, new Field { Name = "Offer.ProductID as Price_ProductID", NotInQuery = true }, new Field { Name = "Offer.ColorID" }, new Field { Name = "CategoryEnabled", NotInQuery = true }, }); if (SettingsCatalog.ComplexFilter) { _paging.AddFieldsRange(new List <Field> { new Field { Name = "(select max (price) - min (price) from catalog.offer where offer.productid=product.productid) as MultiPrices" }, new Field { Name = "(select min (price) from catalog.offer where offer.productid=product.productid) as Price" }, }); } else { _paging.AddFieldsRange(new List <Field> { new Field { Name = "0 as MultiPrices" }, new Field { Name = "Price" }, }); } _paging.AddParam(new SqlParam { ParameterName = "@CustomerId", Value = CustomerContext.CustomerId.ToString() }); _paging.AddParam(new SqlParam { ParameterName = "@Type", Value = PhotoType.Product.ToString() }); if (string.IsNullOrEmpty(Request["categoryid"]) || !Int32.TryParse(Request["categoryid"], out _categoryId)) { _categoryId = 0; var sbMainPage = StaticBlockService.GetPagePartByKeyWithCache("MainPageSocial"); if (sbMainPage != null && sbMainPage.Enabled) { MainPageText = sbMainPage.Content; } } if (!string.IsNullOrEmpty(MainPageText)) { SetMeta(null, string.Empty); return; } category = CategoryService.GetCategory(_categoryId); if (category == null || category.Enabled == false || category.ParentsEnabled == false) { Error404(); return; } ProductsCount = category.GetProductCount(); categoryView.CategoryID = _categoryId; categoryView.Visible = true; pnlSort.Visible = ProductsCount > 0; productView.Visible = ProductsCount > 0; lblCategoryName.Text = _categoryId != 0 ? category.Name : Resource.Client_MasterPage_Catalog; //lblCategoryDescription.Text = category.Description; //imgCategoryImage.ImageUrl = string.IsNullOrEmpty(category.Picture) ? "" : string.Format("{0}", ImageFolders.GetImageCategoryPath(false, category.Picture)); breadCrumbs.Items = CategoryService.GetParentCategories(_categoryId).Select(parent => new BreadCrumbs { Name = parent.Name, Url = "social/catalogsocial.aspx?categoryid=" + parent.CategoryId }).Reverse().ToList(); breadCrumbs.Items.Insert(0, new BreadCrumbs { Name = Resource.Client_MasterPage_MainPage, Url = UrlService.GetAbsoluteLink("social/catalogsocial.aspx") }); SetMeta(category.Meta, category.Name); if (category.DisplayChildProducts) { var cfilter = new InChildCategoriesFieldFilter { CategoryId = _categoryId.ToString(), ParamName = "@CategoryID" }; _paging.Fields["[ProductCategories].[CategoryID]"].Filter = cfilter; } else { var cfilter = new EqualFieldFilter { Value = _categoryId.ToString(), ParamName = "@catalog" }; _paging.Fields["[ProductCategories].[CategoryID]"].Filter = cfilter; } _paging.Fields["Enabled"].Filter = new EqualFieldFilter { Value = "1", ParamName = "@enabled" };; _paging.Fields["CategoryEnabled"].Filter = new EqualFieldFilter { Value = "1", ParamName = "@CategoryEnabled" }; var logicalFilter = new LogicalFilter { ParamName = "@Main", HideInCustomData = true }; logicalFilter.AddFilter(new EqualFieldFilter { Value = "1", ParamName = "@Main1", HideInCustomData = true }); logicalFilter.AddLogicalOperation("OR"); logicalFilter.AddFilter(new NullFieldFilter { Null = true, ParamName = "@Main2", HideInCustomData = true }); _paging.Fields["Offer.Main"].Filter = logicalFilter; BuildSorting(); }
public static void SetFilter(this SmartObject smartObject, LogicalFilter filter) { var listMethod = smartObject.GetExecutingMethod() as SmartListMethod; listMethod.Filter = filter; }
public virtual T Visit(LogicalFilter <TValue> nodeIn, TArgs args) { throw new NotImplementedException(); }
public override FilterNode <ClrValue> Visit(LogicalFilter <IJsonValue> nodeIn) { return(new LogicalFilter <ClrValue>(nodeIn.Type, nodeIn.Filters.Select(x => x.Accept(this)).ToList())); }
// shows how to combine filters using logical And private void menuItemLogicalFilter_Click(object sender, System.EventArgs e) { try { Feature fChicago = _catalog.SearchForFeature("uscty_1k", MapInfo.Data.SearchInfoFactory.SearchWhere("City='Chicago'")); // build up a search info by hand (not using the factory) Distance d1 = new Distance(35, DistanceUnit.Mile); Distance d2 = new Distance(125, DistanceUnit.Mile); QueryFilter filterA = new MyCustomFilter(fChicago.Geometry, d1, d2); // build up a search info by hand (not using the factory) QueryFilter filterB = new SqlExpressionFilter("State='IL'"); QueryFilter filter = new LogicalFilter(LogicalOperation.And, filterA, filterB); QueryDefinition qd = new QueryDefinition(filter, "*"); SearchInfo si = new SearchInfo(null, qd); IResultSetFeatureCollection fc = _catalog.Search("uscty_1k", si); // set map view to show search results _map.SetView(fc.Envelope); // make a search geometry to show what we are doing FeatureGeometry buffer1 = fChicago.Geometry.Buffer(d1.Value, d1.Unit, 20, DistanceType.Spherical); FeatureGeometry buffer2 = fChicago.Geometry.Buffer(d2.Value, d2.Unit, 20, DistanceType.Spherical); ShowSearchGeometry(buffer1); ShowSearchGeometry(buffer2, false); Feature fIL = _catalog.SearchForFeature("usa", MapInfo.Data.SearchInfoFactory.SearchWhere("State='IL'")); ShowSearchGeometry(fIL.Geometry, false); // show results as selection SelectFeatureCollection(fc); } finally { Cursor.Current = Cursors.Default; } }
public void DefaultParamsTest() { string expected = @"<?xml version=""1.0"" encoding=""utf-8""?> <logical logical_operator=""and""> <expression> <field>recordno</field> <operator>>=</operator> <value>1234</value> </expression> <logical logical_operator=""or""> <expression> <field>ownerobject</field> <operator>=</operator> <value>PROJECT</value> </expression> <expression> <field>ownerobject</field> <operator>=</operator> <value>CUSTOMER</value> </expression> </logical> </logical>"; Stream stream = new MemoryStream(); XmlWriterSettings xmlSettings = new XmlWriterSettings(); xmlSettings.Encoding = Encoding.UTF8; xmlSettings.Indent = true; xmlSettings.IndentChars = " "; IaXmlWriter xml = new IaXmlWriter(stream, xmlSettings); ExpressionFilter exp1 = new ExpressionFilter(); exp1.FieldName = "recordno"; exp1.Operator = ExpressionFilter.OperatorGreaterThanOrEqualTo; exp1.Value = "1234"; ExpressionFilter exp2 = new ExpressionFilter(); exp2.FieldName = "ownerobject"; exp2.Operator = ExpressionFilter.OperatorEqualTo; exp2.Value = "PROJECT"; ExpressionFilter exp3 = new ExpressionFilter(); exp3.FieldName = "ownerobject"; exp3.Operator = ExpressionFilter.OperatorEqualTo; exp3.Value = "CUSTOMER"; LogicalFilter logical2 = new LogicalFilter(); logical2.Operator = LogicalFilter.OperatorOr; logical2.Filters.Add(exp2); logical2.Filters.Add(exp3); LogicalFilter logical1 = new LogicalFilter(); logical1.Operator = LogicalFilter.OperatorAnd; logical1.Filters.Add(exp1); logical1.Filters.Add(logical2); logical1.WriteXml(ref xml); xml.Flush(); stream.Position = 0; StreamReader reader = new StreamReader(stream); Diff xmlDiff = DiffBuilder.Compare(expected).WithTest(reader.ReadToEnd()) .WithDifferenceEvaluator(DifferenceEvaluators.Default) .Build(); Assert.IsFalse(xmlDiff.HasDifferences(), xmlDiff.ToString()); }
public abstract void Visit(LogicalFilter filter);