Словарь словаря от IQueryable - PullRequest
5 голосов
/ 05 марта 2012

Я хотел бы, чтобы метод возвращал словарь словаря из формулы 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, и я хотел бы ограничить объем данных, передаваемых клиенту.

Спасибо

1 Ответ

4 голосов
/ 05 марта 2012

Вот пример использования 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));
...