Come compilare dynamicmente un gruppo in un elenco di dizionari

Sto cercando di eseguire un groupby su un object IEnumerable. Il problema è che non so in fase di compilazione quali campi voglio raggruppare. Ho trovato un altro post nello stack che spiega come farlo quando la class è conosciuta e ha delle proprietà, ma nel mio caso sto trattando un dizionario e le chiavi sono anche conosciute solo in fase di esecuzione.

Il mio codice sarebbe simile a qualcosa del genere (so che questo non si compila …):

private object GetValuesGroupedBy(List groupbyNames, List summableNames) { // get the list of items in the grid var listOfDicos = grid.AllItems; return listOfDicos .GroupBy(x => new { x[groupbyNames[0]], x[groupbyNames[1]], x[groupbyNames[2]] }) .Select(group => new { group.Key, group.Sum(x => x[summableNames[0]]), group.Sum(x => x[summableNames[1]]) }); } 

Qualche idea? Ho iniziato a esaminare Dynamic LINQ ma sono bloccato (perché non sto usando le proprietà ma una collezione Key / Value) …

Grazie a tutti!!

Sean

Quindi sono in grado di far funzionare il groupby … (l’istruzione select è un’altra domanda). Grazie a c0d1ng per avermi messo sulla strada giusta. La syntax non è stata così banale perché sto usando gli indicizzatori e non le proprietà …

Di seguito è riportato il mio codice:

  private void GetValuesGroupedBy(List> list, List groupbyNames, List summableNames) { // build the groupby string StringBuilder groupBySB = new StringBuilder(); groupBySB.Append("new ( "); bool useComma = false; foreach (var name in groupbyNames) { if (useComma) groupBySB.Append(", "); else useComma = true; groupBySB.Append("it[\""); groupBySB.Append(name); groupBySB.Append("\"]"); groupBySB.Append(" as "); groupBySB.Append(name); } groupBySB.Append(" )"); var groupby = list.GroupBy(groupBySB.ToString(), "it"); }