Criar dinamicamente objeto anônimo a partir de valores de lista c #

Eu tenho uma lista (ou pode ser matriz) de seqüências de caracteres das quais desejo criar dinamicamente um objeto anônimo. Como eu faço isso?

var dataSet = new DataSet();
dataSet.ReadXml(@"");
var dataTable = dataSet.Tables[0];
var dataRow = dataTable.Rows[0];    

var keys = new List<string> {"Column1","Column2"};
var result = new {keys[0] = dataRow[keys[0]], keys[1] = dataRow[keys[1]]}

Portanto, a lista denominada "chaves" será criada fora desse método e pode conter 1 a muitos valores. Tentei criar um dicionário e percorrer a lista e adicionar pares de chave / valor ao dicionário, mas não consegui descobrir como converter o dicionário novamente em um tipo anônimo. Também experimentei os objetos expando, mas isso não pareceu me levar mais longe.

Devo ser capaz de retornar um tipo anônimo, pois o resultado desse método será usado com a cláusula GroupBy de uma consulta LINQ.

Aqui está o método que eu tive para criar dinamicamente o dicionário:

    public object Key(DataRow dataRow, List<String> keys)
    {
        var dictionary = new IDictionary<string, object>;
        foreach (string key in keys)
        {
            dictionary.Add(key, dataRow[key]);
        }
        return dictionary;
    }

Aqui está minha consulta LINQ:

var duplicates = dataTable.AsEnumerable().GroupBy(r => Key(r, keys)).Where(c => c.Count() > 1).ToList();

A cláusula GroupBy funciona se eu codificar em um tipo anônimo a partir do método Key (). Basicamente, eu só preciso que a cláusula GroupBy seja dinamicamente definida com base nos valores na lista de chaves.

questionAnswers(1)

yourAnswerToTheQuestion