Rookian, я имею в виду, что предоставление хранилищам желаемых свойств может служить моделью представления.
В вашем примере "CustomerRepository.GetAll().Select(x=>new {firstname = x.Firstname, lastname = x.Lastname}.ToList()
" вы извлекаете все свойства из базы данных и преобразуете его с помощью Linq в Objects, что является проблемой, если проблема заключается в производительности.
Я сам не реализовал ничего подобного, но в настоящее время я использую Linq для NHibernate в своих репозиториях.
Я полагаю, что API может выглядеть следующим образом:
IRepository<TEntity>
{
List<object> FindAll(params Func<TEntity, object>[] properties);
}
, где клиент использует API следующим образом:
var presentation = repository.FindAll(x => x.Firstname, x => x.Lastname);
... и реализация использует базу данных только для извлечения необходимых свойств.