DAL com dapper e C #

Eu tenho uma camada de acesso a dados que utiliza o Dapper, mas não posso deixar de sentir que poderia ser muito mais elegante. O DAL está apenas passando parâmetros e mapeando o modelo de acordo com as respostas nomeadas do modelo, para que a parte seja direta pelo menos, mas eu odeio código que parece duplicado.

Aqui está um exemplo

 public IEnumerable<Product> ProductSearch(int? userId, DateTime?      modifiedAfter, DateTime? modifiedBefore, Guid? productId)
    {
        IList<Product> products;

        using (var connection = _connection.OpenConnection())
        {
            const string sproc = "dbo.stp_Product_Search";

            products = connection.Query<JobProduct>(sproc, new
            {
                User_ID = userId,
                Modified_After = modifiedAfter,
                Modified_Before = modifiedBefore,
                Product_ID = productId
            }, commandType: CommandType.StoredProcedure)
            .ToList();
        }
        return products;
    }

Eu tenho muito código assim, mas com diferentes parâmetros e entidades usados. Alguém tem bons exemplos?

questionAnswers(2)

yourAnswerToTheQuestion