GET with paging, sorting and filtering
//countQuery mirrors query through the filter assignments


I don't think that's necessary. You could have only one query for the first part of the method, then do recordCount = query.Count(); and then keep using query as you do now.

This way, you have less code and less chance of the count getting out of sync.



query.Where("IsActive = true")


I realize Dynamic Linq is an option, but I think you shouldn't use it when you don't have to. If possible, I would constraint TEntity to some Entity base class or IEntity interface (maybe you already do that) and then write:

query.Where(entity =&gt; entity.IsActive);




query = query.Skip(_start);
query = query.Take(perPage);


I don't see any reason why spread this over two lines:

query = query.Skip(_start).Take(perPage);




List&lt;TEntity&gt; page;

…

page = query.ToList();

return page;


The variable page does not serve any purpose, get rid of it:

return query.ToList();