Select
The Select feature defined in Specification behaves the same as Select in Linq, and it takes in IEnumerable<TSource> and Func<TSource, TResult> as its parameters.
Select is used to transform elements in a sequence into a new form. In Specification, Select is most commonly used to select a single property of each object in a list being queried. For example, the below expression could be used to retrieve only the name of each object:
Query.Select(x => x.Name);
Since this query is now returning a different type, the type of Name, rather than of x, the base class of the Specification will need to reflect this. Instead of being a Specification<T>, the Specification will need to be a Specification<T, TReturn>:
public class StoreNamesSpec : Specification<Store, string?>
{
public StoreNamesSpec()
{
Query.Select(x => x.Name);
}
}