Query Aspects

A product uses query aspects to attach snippets of query code to a MetaClass or MetaLayout.

One common example is for setting default sorts on a meta-class.

A product can indicate how a meta-class should be sorted by default as follows (assuming the code is inside a builder. See Builder API).

The example below sets the standard sorting for a person.

Elements.PersonBuilder.DefaultSort("LastName"); Elements.PersonBuilder.DefaultSort("FirstName");

The example above is already optimal, but let's examine below how we could write it using a query aspect.

Elements.PersonBuilder.Filter( q => q.OrderBy("LastName").OrderBy("FirstName") ) );

The example above is trivial, but the aspect can include any query elements it wants (see Query API).

The following base classes should suffice for most purposes:

  • ActionBasedQueryAspect: As shown above, provides a way of extending the query for a property or class. The example above is anonymous, but the aspects can also be named so that a product can add multiple aspects of the same type.

  • ActionBasedQueryAspect<T>: An ActionBasedQueryAspect that provides the source object when the query aspect is on a relation (e.g. if the query aspect is on the relationship from person => company, the source person is provided)