// Searches the given table (DbSet) with the given query (enhancer) and converts it to some time via 'selector' protected async Task <IActionResult> SelectOr404 <T>(Func <DbSet <T>, IQueryable <T> > enhancer, Func <T, object> selector) where T : class { var query = enhancer(context.Set <T>()); T entity = await( from entry in query select entry ).FirstOrDefaultAsync(); if (entity == null) { return(NotFound()); } else { return(Ok(selector(entity))); } }