Como retornar um objeto dinâmico da consulta SQL

Eu tenho uma situação em que um procedimento de loja retorna uma coleção, mas não como a estrutura do objeto porque a consulta é muito dinâmica.

Uma consulta pode retornar:

Id | Localização | MarketSegment | ... n colunas

e outro pode retornar

Id | Representante de vendas | Localização | Região | ... n colunas

Estou simplesmente retornando um "objeto", como você pode ver no código abaixo. Sei que isso não vai funcionar, mas como posso configurá-lo?

using (DbContext db = new Context())
{

    var items = db.Database.SqlQuery<object>(
        "SP @Param1, @Param2",
        new SqlParameter("Param1", ped),
        new SqlParameter("Param2", 25)
    ).ToList();

    return Request.CreateResponse<List<object>>(HttpStatusCode.OK, items);
}

EDITAR:

Não sei se mostrar o SP ajudará de qualquer maneira, exceto se eu puder explicar mais.

Cada coluna é representada como campos personalizados. Os usuários podem criar n números de campos personalizados. Portanto, se você executar o SP para Usuário1 e ele tiver 5 campos personalizados, cada um deles será representado em Colunas, mas se o Usuário2 tiver 3 campos personalizados, apenas 3 colunas serão representadas. O que eu não tenho controle é o nome do campo personalizado e o número de campos personalizados.

questionAnswers(2)

yourAnswerToTheQuestion