How to use Specifications with In Memory Collections

You can use specifications on collections of objects in memory. This approach can be convenient when retrieving data doesn’t require querying a remote or out of process data store like a database. If the process does require querying external persistence, refer to the practices for using a specification with a Repository Pattern or DbContext.

A specification can be applied to an in memory collection using the Evaluate method. This method takes a single parameter of type IEnumerable<T> representing the collection on which the specification will be applied to.

public class CustomerByAgeSpec : Specification<Customer>
{
    public CustomerByAgeSpec(int age)
    {
        Query.Where(x => x.Age > age);
    }
}
IEnumerable<Customer> customers = [];

var spec = new CustomerByAgeSpec(18);
IEnumerable<Customer> filteredCustomers = spec.Evaluate(customers);

Note

The in-memory evaluation will ignore the ORM specific features in the specification. Please refer to the Features section for the list of base and ORM specific functions.


This site uses Just the Docs, a documentation theme for Jekyll.