So for this I decided to place the code from tasks layer (repository that only returned the full objects) into a query class per view (select only properties I wanted and mapped them to my ViewModel).
Also I decided to use the mapping through nhibernate because selecting specific columns forced me to map the fields anyway back into my domain from an object array so I figured since I already needed to do that I might as well just use the TransformUsing method as well.
ClientListQuery.cs
public IList<ClientListViewModel> GetClientListQuery()
{
ClientListViewModel clientListViewModel = null;
return Session.QueryOver<Client>()
.OrderBy(o => o.Name).Asc
.SelectList(list => list
.Select(c => c.Id).WithAlias(() => clientListViewModel.Id)
.Select(c => c.Name).WithAlias(() => clientListViewModel.Name)
...
.Select(c => c.Logo.Id).WithAlias(() => clientListViewModel.LogoId)
.Select(c => c.LogoBlackAndWhite.Id).WithAlias(() => clientListViewModel.LogoBlackAndWhiteId))
.TransformUsing(Transformers.AliasToBean<ClientListViewModel>())
.List<ClientListViewModel>();
}
Client Controller
[Transaction]
public ActionResult Read([DataSourceRequest] DataSourceRequest request)
{
return Json(_clientListQuery.GetClientListQuery().ToDataSourceResult(request));
}