07 March 2024

XAP

Collection Index

An index can be defined on a Collection property (such as List). Setting such an index means that each of the Collection's items is indexed.

Setting an index on a Collection is done using the SpaceIndex.Path attribute where a Collection property should be followed by "[*]".

The following example shows how to define an index on a List of Integers:

[SpaceClass] public class CollectionIndexingExample { private Integer id; private List&lt;int&gt; numbers; // Getter and setter methods... // This means that each Integer in the List is indexed. [SpaceIndex(Path = "[*]")] [SpaceProperty (StorageType=StorageType.Object)] public List<string> myList { get; set; } public List&lt;int&gt; Numbers { get; set; } }

The following query shows how to take advantage of the defined index:

SqlQuery<CollectionIndexingExample> sqlQuery = new SqlQuery<CollectionIndexingExample>("Numbers[*] = 30"); CollectionIndexingExample[] result = spaceProxy.ReadMultiple(sqlQuery);

Nested Property within a Collection

Its also possible to index a nested property within a collection.

The following example shows how to define an index on a Book.id property, which resides in a Collection property in Author:

[SpaceClass] public class Author { // Properties... // This means that each Book.Id in the Collection is indexed. [SpaceIndex(Path = "[*].Id")] [SpaceProperty(StorageType = StorageType.Document)] public List<Book> Books{ get; set; } } public class Book { // Properties... public int? Id{ get; set; } }

The following query shows how to take advantage of the defined index:

SqlQuery<Author> sqlQuery = new SqlQuery<Author>("Books[*].Id = 57"); Author result = spaceProxy.Read(sqlQuery);

Setting an index on a Collection within a nested property is also accepted:

[SpaceClass] public class Employee { // Properties... [SpaceIndex(Path = "PhoneNumbers[*]")] [SpaceProperty(StorageType = StorageType.Document)] public Information Information{ get; set; } } public class Information { // Properties... public List<String> PhoneNumbers{ get; set; } }

Both [SpaceIndex(Type=SpaceIndexType.Basic)] and [SpaceIndex(Type=SpaceIndexType.Extended)] are supported.