2012-03-05 15 views
5

Мне нужен метод, чтобы вернуть словарь Словаря из формулы IQueryable. Как правило,Словарь словаря из IQueryable

Dictionary<int, Dictionary<DateTime, string>> 

Сначала я посмотрел на ToDictionary(), конечно, но не мог найти способ, чтобы объявить два один за другим.

Затем я начал работу с ToLookup(), и у меня есть способ переносить это с помощью ILookup, причем строка является моим вторичным словарем (DateTime.Tostring() + другая строка) ... вы следуете? :) Но я не найти решение ILookup действительно комфортабельный (синтаксический анализ даты в строку и, когда я получаю данные -> строка даты .. beuark)

Это дало бы что-то подобное

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

Теперь я думаю о создании списка самосозданного класса с 3-мя информацией, которые мне нужны в качестве свойств.

Не могли бы вы помочь мне выбрать лучший образец? Этот метод размещен на службе Windows, и я хотел бы ограничить объем данных, переданных клиенту.

Спасибо

ответ

4

Вот пример, используя GroupBy и 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

Это работало, спасибо за помощь ... даже если я немного стыдно не попробовали это раньше. – Gloups

Смежные вопросы