2012-03-05 28 views
5

Sözlük adlı sözlük bir IQueryable formülü döndürmek için bir yöntem istiyorum. Tipik olarak,IQueryable adlı sözlükteki Sözlük

Dictionary<int, Dictionary<DateTime, string>> 

İlk başta, tabii ToDictionary() baktı ama birbiri ardına iki tane ilan etme yolunu bulamadık.

Sonra, ToLookup() 'da çok sevdim ve bunu ikincil sözlüğüm (DateTime.Tostring() + diğer dize) olan bir dizeyle ILookup ile taşımanın bir yolu var ... takip ediyor musunuz?

o

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); 
gibi bir şey verecekti Yani - :) Ama gerçekten konforlu ILookup çözüm (> bugüne kadar dize .. beuark dizesine bir tarih ayrıştırma ve ben veri aldığınızda) bulmuyorum

Şimdi, özellik olarak ihtiyaç duyduğum 3 bilgi ile kendiliğinden oluşturulmuş bir liste oluşturmayı düşünüyorum.

En iyi desenleri seçmeme yardım eder misiniz? Bu yöntem bir windows servisinde barındırılıyor ve müşteriye aktarılan veri miktarını sınırlamak istiyorum.

Eğer

cevap

4

İşte GroupBy ve ToDictionary kullanarak, bir örnek ederiz: yardımcı olmak için çalıştı

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

sayesinde ... ben daha önce denedim değil biraz utanıyorum bile. – Gloups