Вопрос: Зачем делать хранилище универсальным, если вы собираетесь предоставлять методы, специфичные для типа (или у всех ваших сущностей есть FirstName, LastName, Address и т. Д.?).
Если для ваших базовых ресурсов данных включено дерево выражений LINQ, общая сигнатура также будет общей, например,
IEnumerable<TEntity> Query(Expression<Func<TEntity, Boolean>> filter)
И если вы хотите, чтобы ваши запросы были «наращиваемыми», вы можете выставитьIQueryable
IQueryable<TEntity> Query(Expression<Func<TEntity, Boolean>> filter)