2012-03-05 22 views
5

Vorrei un metodo per restituire un dizionario del dizionario da una formula IQueryable. In genere,Un dizionario del dizionario di IQueryable

Dictionary<int, Dictionary<DateTime, string>> 

In un primo momento, ho guardato ToDictionary(), naturalmente, ma non riusciva a trovare un modo per dichiarare due uno dopo l'altro.

Poi, ho visto ToLookup() e ho un modo per portare questo con un ILookup con la stringa che è il mio dizionario secondario (il DateTime.Tostring() + l'altra stringa) ... segui? :) Ma non trovo la soluzione iLookup veramente confortevoli (l'analisi di una data a stringa e quando ricevo i dati -> string ad oggi .. beuark)

Che possa dare qualcosa di simile

return this.ttdc.Trackers.GroupBy(t => new { TrackerTaskId = t.TrackerTaskID, DateGenerated = t.TrackerDateGenerated }) 
        .Select(t => new { taskId = t.Key.TrackerTaskId, DateGenerated = t.Key.DateGenerated, count = t.Count() }) 
        .ToLookup(k => k.taskId.Value, k => k.DateGenerated.Value.ToString() + "|" + k.count); 

Ora, sto pensando di creare una lista di classi autodefinite con le 3 informazioni di cui ho bisogno come proprietà.

Potrebbe aiutarmi a scegliere il modello migliore? Questo metodo è ospitato su un servizio Windows e vorrei limitare la quantità di dati trasferiti al client.

Grazie

risposta

4

Ecco un esempio, utilizzando GroupBy e ToDictionary:

var testValues = new[]{new {ID = 1, Date = new DateTime(2010,1,1), Str = "Val1"}, 
         new {ID = 1, Date = new DateTime(2011,2,2), Str = "Val2"}, 
         new {ID = 2, Date = new DateTime(2010,1,1), Str = "Val3"}}; 
var dict = testValues.GroupBy(item => item.ID) 
        .ToDictionary(grp => grp.Key, 
            grp => grp.ToDictionary(item => item.Date, 
                  item => item.Str)); 
+0

che ha funzionato, grazie per l'aiuto ... anche se sono un po 'di vergogna per non aver provato prima. – Gloups