Динамически создавать анонимный объект из списка значений c #
У меня есть список (или может быть массив) строк, из которых я хочу динамически создать анонимный объект. Как мне это сделать?
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]]}
Таким образом, список с именем «keys» будет создан вне этого метода и может содержать от 1 до многих значений. Я попытался создать словарь и пройтись по списку и добавить пары «ключ-значение» в словарь, но потом не мог понять, как преобразовать словарь обратно в анонимный тип. Я также экспериментировал с объектами экспандо, но это, похоже, не дало мне ничего большего.
Я должен быть в состоянии вернуть анонимный тип, так как результат этого метода будет использоваться с предложением GroupBy запроса LINQ.
Вот метод, который я должен был динамически создать словарь:
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;
}
Вот мой запрос LINQ:
var duplicates = dataTable.AsEnumerable().GroupBy(r => Key(r, keys)).Where(c => c.Count() > 1).ToList();
Предложение GroupBy работает, если я жестко закодировал анонимный тип из метода Key (). По сути, мне просто нужно, чтобы предложение GroupBy было динамически установлено на основе значений в списке ключей.