public void SerializeCriteriaGroup() { var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or }; criteriaGroup.Criterias.Add(new Criteria { Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 }); criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.Contains, Value = "NPatterns" }); var jsonString = JsonConvert.SerializeObject(criteriaGroup, new StringEnumConverter()); var criteriaGroup2 = JsonConvert.DeserializeObject <CriteriaGroup>(jsonString, new StringEnumConverter()); Assert.AreEqual(criteriaGroup.Operator, criteriaGroup2.Operator); Assert.AreEqual(criteriaGroup.Criterias.Count, criteriaGroup2.Criterias.Count); for (int i = 0; i < criteriaGroup.Criterias.Count; i++) { var criteria = criteriaGroup.Criterias[i]; var criteria2 = criteriaGroup2.Criterias[i]; Assert.AreEqual(criteria.Field, criteria2.Field); Assert.AreEqual(criteria.Operator, criteria2.Operator); Assert.AreEqual(criteria.Value, criteria2.Value); } }
private List <Track> GetValidTracks(CriteriaGroup criteriaGroup) { if (!criteriaGroup.DiscCriteria.Any() && !criteriaGroup.AlbumCriteria.Any()) { return(_library.Artists .Where(a => criteriaGroup.ArtistCriteria.All(cr => cr.Predicate(a))) .SelectMany(a => a.Tracks) .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t))) .ToList()); } if (!criteriaGroup.ArtistCriteria.Any()) { return(_library.Artists .SelectMany(a => a.Albums) .Where(a => criteriaGroup.AlbumCriteria.All(cr => cr.Predicate(a))) .SelectMany(a => a.Discs) .Where(d => criteriaGroup.DiscCriteria.All(cr => cr.Predicate(d))) .SelectMany(a => a.Tracks) .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t))) .ToList()); } return(_library.Artists .SelectMany(a => a.Albums) .Where(a => criteriaGroup.AlbumCriteria.All(cr => cr.Predicate(a))) .SelectMany(a => a.Discs) .Where(d => criteriaGroup.DiscCriteria.All(cr => cr.Predicate(d))) .SelectMany(a => a.Tracks) .Where(t => criteriaGroup.TrackCriteria.All(cr => cr.Predicate(t)) && criteriaGroup.ArtistCriteria.All(cr => cr.Predicate(t.Artist))) .ToList()); }
public void HandleDeleteButtonPressed() { if (CriteriaGroup != null) { CriteriaGroup.RequestDeletion(); } }
private void AddCriteriaGroupView(CriteriaGroup criteriaGroup, bool ignoreSchemaChange = false) { var viewGo = Instantiate(CriteriaGroupViewPrefab); var view = viewGo.GetComponent <CriteriaGroupViewBehaviour>(); // set external schemas view.ExternalSchemaProvider = ExternalSchemaProvider; view.CriteriaGroup = criteriaGroup; view.transform.SetParent(CriteriaGroupAttachmentPoint, false); CriteriaGroupViews.Add(view); AddGroupButtonWrapperComponent.transform.SetAsLastSibling(); view.CriteriaChanged += HandleCriteriaGroupChanged; if (!ignoreSchemaChange) { HighlightSelection(); ComputeSchema(); ShowNewSchema(); } }
protected BaseFilterBuilder() { SortCriteria = new List<SortCriterion>(); FilterCriteria = new CriteriaGroup(); Skip = 0; Take = 10; }
protected BaseFilterBuilder() { SortCriteria = new List <SortCriterion>(); FilterCriteria = new CriteriaGroup(); Skip = 0; Take = 10; }
private CriteriaPlaylist CreateCriteriaPlaylist(XElement playlistXml) { var id = int.Parse(playlistXml.Attribute(PlaylistId).Value); var title = playlistXml.Attribute(PlaylistTitle).Value; var favourite = playlistXml.Attribute(PlaylistIsFavourite)?.Value == TrueValue; var playlist = new CriteriaPlaylist(id, title, favourite); var orderByProperty = playlistXml.Attribute(PlaylistOrderBy).Value; playlist.OrderByProperty = string.IsNullOrEmpty(orderByProperty) ? (PropertyName?)null : (PropertyName)Enum.Parse(typeof(PropertyName), orderByProperty); playlist.OrderByDescending = playlistXml.Attribute(PlaylistOrderByDescending).Value == TrueValue; var maxTracks = playlistXml.Attribute(PlaylistMaxTracks).Value; playlist.MaxTracks = string.IsNullOrEmpty(maxTracks) ? (int?)null : int.Parse(maxTracks); playlist.CriteriaGroups = new List <CriteriaGroup>(); foreach (var criteriaGroupXml in playlistXml.Element(PlaylistCriteriaGroups).Elements(PlaylistCriteriaGroup)) { var criteriaGroup = new CriteriaGroup(); foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistArtistCriteria).Elements(PlaylistCriteria)) { criteriaGroup.ArtistCriteria.Add(GetArtistCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistAlbumCriteria).Elements(PlaylistCriteria)) { criteriaGroup.AlbumCriteria.Add(GetAlbumCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistDiscCriteria).Elements(PlaylistCriteria)) { criteriaGroup.DiscCriteria.Add(GetDiscCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistTrackCriteria).Elements(PlaylistCriteria)) { criteriaGroup.TrackCriteria.Add(GetTrackCriteria(criteriaXml)); } if (criteriaGroup.TrackCriteria.Any() || criteriaGroup.DiscCriteria.Any() || criteriaGroup.AlbumCriteria.Any() || criteriaGroup.ArtistCriteria.Any()) { playlist.CriteriaGroups.Add(criteriaGroup); } } return(playlist); }
public CriteriaGroupViewModel(CriteriaGroup crg) { Contract.Requires(crg != null); critgr = crg; validatableEntity = critgr; critgr.PropertyChanged += model_PropertyChanged; }
public void Show(CriteriaGroup group) { Group = group; if (Group == null) { Visible = false; return; } Visible = true; }
public void ExecuteDynamicQueryObject() { var source = new List <Product> { new Product { Name = "NPatterns", Version = 1.2 }, new Product { Name = "NPatterns.Messaging.IoC", Version = 1.1 }, new Product { Name = "NPatterns.ObjectRelational.EF", Version = 1.0 }, new Product { Name = null, Version = 0 } }; var query = new QueryObject(new DynamicQueryObjectExecutor()); query.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.IsNotNull }); var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or }; criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns" }); criteriaGroup.Criterias.Add(new Criteria { Field = "Name", Operator = CriteriaOperator.EndsWith, Value = "ioc" }); query.Add(criteriaGroup); query.Add(new SortDescription { Field = "Version", Direction = SortDirection.Ascending }); var result = query.Execute(source.AsQueryable()).ToList(); Assert.AreEqual(2, result.Count); Assert.IsTrue(result[0].Version < result[1].Version); query.Add(new Criteria { Field = "Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 }, CriteriaGroupOperator.Or); var result2 = query.Execute(source.AsQueryable()).ToList(); Assert.AreEqual(3, result2.Count); }
public void CrGroup2Criterion() { var gr = new CriteriaGroup(); var cr = gr.AddCriterion(); Assert.AreEqual(cr, gr.Criteria.Single()); Assert.AreEqual(gr, cr.Group); gr.RemoveCriterion(cr); Assert.IsFalse(gr.Criteria.Contains(cr)); Assert.IsNull(cr.Group); }
private CriteriaPlaylist CreatePlaylist(CriteriaPlaylist playlist = null) { if (playlist == null) { playlist = new CriteriaPlaylist(0, "", false); } playlist.Title = PlaylistTitle; playlist.OrderByProperty = OrderByProperty; playlist.OrderByDescending = OrderByDescending; playlist.MaxTracks = MaxTracks; playlist.CriteriaGroups.Clear(); foreach (var group in Criteria.Where(g => g.Criteria.Any())) { var criteriaGroup = new CriteriaGroup(); foreach (var criteria in group.Criteria.Where(g => g.PropertyName != null)) { switch (criteria.PropertyOwner) { case PropertyOwner.Track: criteriaGroup.TrackCriteria.Add(_trackCriteriaService.GetTrackCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Disc: criteriaGroup.DiscCriteria.Add(_trackCriteriaService.GetDiscCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Album: criteriaGroup.AlbumCriteria.Add(_trackCriteriaService.GetAlbumCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Artist: criteriaGroup.ArtistCriteria.Add(_trackCriteriaService.GetArtistCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; default: throw new InvalidOperationException("Invalid property owner"); } } playlist.CriteriaGroups.Add(criteriaGroup); } return(playlist); }
public CriteriaGroupEditorViewModel(CriteriaGroup group) { this.crgroup = group; Criteria = new ObservableCollection <CriterionEditorViewModel>(); CriteriaGroup = new CriteriaGroupViewModel(crgroup); tester = new ExistanceTester <CriteriaGroup>(crgroup, CriteriaGroup, Session); tester.Test(); (crgroup as IEditableObject).BeginEdit(); Title = "Редактор группы критериев"; HelpTopic = ""; WithHelpButton = false; }
private void Build(StringBuilder builder, CriteriaGroupOperator op, CriteriaGroup criteriaGroup) { var sb = new StringBuilder(); foreach (var criteria in criteriaGroup.Criterias) { Build(sb, criteriaGroup.Operator, criteria); } if (sb.Length == 0) { return; } if (builder.Length > 0) { builder.AppendFormat(" {0} ", op); } builder.AppendFormat("({0})", sb); }
private void RemoveCriteriaGroupView(CriteriaGroup criteriaGroup, bool ignoreSchemaChange = false) { var view = CriteriaGroupViews.FirstOrDefault(v => v.CriteriaGroup == criteriaGroup); if (view == null) { return; } Destroy(view.gameObject); CriteriaGroupViews.Remove(view); view.CriteriaChanged -= HandleCriteriaGroupChanged; if (!ignoreSchemaChange) { HighlightSelection(); ComputeSchema(); ShowNewSchema(); } }
public void Hide() { Group = null; Visible = false; }
private void Build(StringBuilder builder, CriteriaGroupOperator op, Criteria criteria) { var property = GetPropertyInfo(typeof(T), criteria.Field); if (property == null) { return; } int valueIndex = _values.Count; if (criteria.Operator != CriteriaOperator.IsContainedIn && criteria.Operator != CriteriaOperator.IsNotContainedIn) { if (builder.Length > 0) { builder.AppendFormat(" {0} ", op); } if (criteria.Operator != CriteriaOperator.IsNull && criteria.Operator != CriteriaOperator.IsNotNull) { criteria.Value = ConvertEx.ChangeType(criteria.Value, property.PropertyType); _values.Add(criteria.Value); } } switch (criteria.Operator) { case CriteriaOperator.IsContainedIn: { var q = from z in criteria.Value.ToString().Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) select new Criteria { Field = criteria.Field, Operator = CriteriaOperator.IsEqualTo, Value = z.Trim() }; var group = new CriteriaGroup { Operator = CriteriaGroupOperator.Or, Criterias = q.ToList() }; Build(builder, op, group); } break; case CriteriaOperator.IsNotContainedIn: { var q = from z in criteria.Value.ToString().Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) select new Criteria { Field = criteria.Field, Operator = CriteriaOperator.IsNotEqualTo, Value = z.Trim() }; var group = new CriteriaGroup { Operator = CriteriaGroupOperator.And, Criterias = q.ToList() }; Build(builder, op, group); } break; default: var format = GetFormat(criteria.Operator, property.PropertyType); if (!string.IsNullOrEmpty(format)) { builder.AppendFormat(format, criteria.Field, valueIndex); } break; } }
public void Add(CriteriaGroup criteriaGroup, CriteriaGroupOperator op = CriteriaGroupOperator.And) { Build(_predicate, op, criteriaGroup); }
private void HandlePayloadExpressionCriteriaGroupRemoved(CriteriaGroup criteriaGroup) { RemoveCriteriaGroupView(criteriaGroup); }
public void ShowAddCriterionStatementDialog(CriteriaGroup group) { AddCriterionStatementDialog.Show(group); }
/// <summary> /// Creates a segment with criteria /// </summary> public static void CreateSegment() { var personalizationManager = PersonalizationManager.GetManager(); using (new ElevatedModeRegion(personalizationManager)) { if (!personalizationManager.GetSegments().Any(s => s.Id == Installer.segmentId)) { var segment = personalizationManager.CreateSegment(Installer.segmentId); segment.Name = "Weekend segment"; segment.Description = "Pages will be personalized according to the day of the week"; segment.IsActive = true; CriteriaGroup group = new CriteriaGroup(); Criterion saturdayCriterion = new Criterion(); saturdayCriterion.CriterionValue = ((int)DayOfWeek.Saturday).ToString(); saturdayCriterion.CriterionDisplayValue = Res.Get<CustomPersonalizationResources>().Saturday; saturdayCriterion.CriterionName = Res.Get<CustomPersonalizationResources>().Day; saturdayCriterion.CriterionTitle = Res.Get<CustomPersonalizationResources>().Day; Criterion sundayCriterion = new Criterion(); sundayCriterion.CriterionValue = ((int)DayOfWeek.Sunday).ToString(); sundayCriterion.CriterionDisplayValue = Res.Get<CustomPersonalizationResources>().Sunday; sundayCriterion.CriterionName = Res.Get<CustomPersonalizationResources>().Day; sundayCriterion.CriterionTitle = Res.Get<CustomPersonalizationResources>().Day; group.Criteria.Add(saturdayCriterion); group.Criteria.Add(sundayCriterion); segment.CriteriaGroups.Add(group); personalizationManager.SaveChanges(); } } }
internal static Filter <TFilterable> BuildWhere <TFilterable>(this Filter <TFilterable> filter, CriteriaGroup criteriaGroup) where TFilterable : class, IFilterable { if (criteriaGroup.CompoundFilterTypes.Any()) { filter.SqlQueryStringBuilder.SafeSqlAppend("("); for (var i = 0; i < criteriaGroup.Criteria.Count; i++) { if (i != 0) { filter.SqlQueryStringBuilder.SafeSqlAppend(criteriaGroup.CompoundFilterTypes[i - 1].ToString().ToUpper(CultureInfo.InvariantCulture)); } var nestedCriteriaGroup = criteriaGroup.Criteria[i] as CriteriaGroup; if (nestedCriteriaGroup != null) { filter.BuildWhere(nestedCriteriaGroup); } else { filter.BuildWhere(criteriaGroup.Criteria[i]); } } filter.SqlQueryStringBuilder.SafeSqlAppend(")"); } else if (criteriaGroup.Criteria.Any()) { var nestedCriteriaGroup = criteriaGroup.Criteria[0] as CriteriaGroup; if (nestedCriteriaGroup != null) { filter.BuildWhere(nestedCriteriaGroup); } else { filter.BuildWhere(criteriaGroup.Criteria[0]); } } return(filter); }
public void ExecuteDynamicQueryObjectWithComplexType() { var source = new List <ProductFeature> { new ProductFeature { Product = new Product { Name = "NPatterns", Version = 1.2 }, Feature = new Feature { Name = "IUnitOfWork" } }, new ProductFeature { Product = new Product { Name = "NPatterns.Messaging.IoC", Version = 1.1 }, Feature = new Feature { Name = "MessageBus" } }, new ProductFeature { Product = new Product { Name = "NPatterns.ObjectRelational.EF", Version = 1.0 }, Feature = new Feature { Name = "UnitOfWork" } }, new ProductFeature { Product = new Product(), Feature = new Feature() } }; var query = new QueryObject(new DynamicQueryObjectExecutor()); query.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.IsNotNull }); var criteriaGroup = new CriteriaGroup { Operator = CriteriaGroupOperator.Or }; criteriaGroup.Criterias.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.IsEqualTo, Value = "npatterns" }); criteriaGroup.Criterias.Add(new Criteria { Field = "Product.Name", Operator = CriteriaOperator.EndsWith, Value = "ioc" }); query.Add(criteriaGroup); var result = query.Execute(source.AsQueryable()).ToList(); Assert.AreEqual(2, result.Count); query.Add(new Criteria { Field = "Product.Version", Operator = CriteriaOperator.IsEqualTo, Value = 1.0 }, CriteriaGroupOperator.Or); var result2 = query.Execute(source.AsQueryable()).ToList(); Assert.AreEqual(3, result2.Count); }
private static void Main(string[] args) { // TODO: Fill in the values for the first three parameters in the StarRezApiClient constructor // The "/services" in the URL is optional StarRezApiClient client = new StarRezApiClient("https://www.server.com/", "Username", "Password"); // Create a "template" for an entry object, with defaults from the database var entry = client.CreateDefault("Entry"); // Fill in the property values entry.NameLast = "Nurk"; entry.NameFirst = "Fred"; entry.NameTitle = "Mr"; entry.DOB = new DateTime(1975, 3, 5); // Create the entry in the database, getting the EntryID back int entryID = client.Create(entry); // select back out the entry, getting back the full details, and also getting the EntryAddress details entry = client.Select("Entry", entryID, includeLookupCaptions: true, relatedTables: new[] { "EntryAddress" }); // Write out some info Console.WriteLine("Created a new entry with the following details:"); Console.WriteLine("Name: " + entry.NameFirst + " " + entry.NameLast + " (" + entry.NamePreferred + ")"); Console.WriteLine("Date of Birth: " + entry.DOB); Console.WriteLine("First email address: " + entry.EntryAddress[0].Email); // When we specify "includeLookupCaptions", any ID field in the table will have a corresponding "_Caption" field Console.WriteLine("Category: " + entry.CategoryID_Caption); // update a field of the entry entry.NamePreferred = "Frederick"; // we can also update a field in another table, if we selected it out entry.EntryAddress[0].Email = "*****@*****.**"; // save the changes to the database bool result = client.Update(entry); if (result) { Console.WriteLine("Successfully updated entry"); } else { Console.WriteLine("Failed to update entry record. Result: " + client.LastResult.ToString()); } // Reselect to get the new data, and redisplay entry = client.Select("Entry", entryID, relatedTables: new[] { "EntryAddress" }); Console.WriteLine("Name: " + entry.NameFirst + " " + entry.NameLast + " (" + entry.NamePreferred + ")"); Console.WriteLine("First email address: " + entry.EntryAddress[0].Email); // see if there are any other Nurks in the database var entries = client.Select("Entry", Criteria.Equals("NameLast", "Nurk")); Console.WriteLine("There are " + entries.Length + " nurks in the database."); // what about Smiths or Jones'? entries = client.Select("Entry", CriteriaGroup.Or( Criteria.Equals("NameLast", "Smith"), Criteria.Equals("NameLast", "Jones") ) ); // CriteriaGroups can also take other CriteriaGroups, to nest Ands and Ors as required. // CriteriaGroups and Criterias can also be created in the traditional manner, with "new" Console.WriteLine("There are " + entries.Length + " smiths and jones' in the database."); // delete the entry, to clean up the database result = client.Delete(entry); if (result) { Console.WriteLine("Successfully deleted entry"); } else { Console.WriteLine("Failed to delete entry record. Result: " + client.LastResult.ToString()); } Console.WriteLine("Press enter to continue."); Console.ReadLine(); }
private void HandlePayloadExpressionCriteriaGroupAdded(CriteriaGroup criteriaGroup) { AddCriteriaGroupView(criteriaGroup); }