2012-03-05 27 views
5

Me gustaría un método para devolver un Diccionario de diccionario de una fórmula IQueryable. Por lo general,Un diccionario de diccionario de IQueryable

Dictionary<int, Dictionary<DateTime, string>> 

En un primer momento, miré a ToDictionary(), por supuesto, pero no pudo encontrar una forma de declarar dos uno tras otro.

Entonces, me gustó ToLookup() y tengo una manera de llevar esto con un ILookup con la cadena siendo mi diccionario secundario (DateTime.Tostring() + la otra cadena) ... ¿sigues? :) Pero no encuentro la solución iLookup muy confortables (análisis de una fecha para la cadena y cuando recibo los datos -> string hasta la fecha .. beuark)

Eso le daría algo por el estilo

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); 

Ahora, estoy pensando en crear una lista de clase creada por mí mismo con las 3 informaciones que necesito como propiedades.

¿Podría ayudarme a elegir el mejor patrón? Este método está alojado en un servicio de Windows y me gustaría limitar la cantidad de datos transferidos al cliente.

Gracias

Respuesta

4

He aquí un ejemplo, usando GroupBy y 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

que funcionaba, gracias por ayudar ... aunque estoy un poco avergonzado de no haber intentado esto antes. – Gloups