2015-09-22 21 views
5

Moje dane jest pod w dwóch tabelachLINQ do słownika z klucza i listy

Master Columns 
ID MyDateTime 
1  07 Sept 
2  08 Sept 

kolumna MyDatetime w powyżej ma unikatowy indeks

Detail Columns 
ID  Data1  Data2 Data3 
1  a   b  c 
1  x   y  z 
1  f   g  h 
2  a   b  c 

Chcę zapełnić to w słowniku. Próbowałem

Dictionary<DateTime, List<Detail>> result = (
          from master in db.master 
          from details in db.detail 
          where (master.ID == detail.ID) 
          select new 
          { 
           master.MyDateTime, 
           details 
          }).Distinct().ToDictionary(key => key.MyDateTime, value => new List<Detail> { value.details }); 

Spodziewam dwa rzędy w słowniku

1, List of 3 rows as details 
2, List of 1 row as details 

pojawia się błąd w którym skarży się na klucz słownika weszło dwukrotnie. Kluczem będzie datetime, który jest unikalny w pana

Odpowiedz

10

To właśnie wyszukiwań są za - więc używać ToLookup zamiast ToDictionary:

ILookup<DateTime, Detail> result = 
    (from master in db.master 
    join details in db.detail on master.ID equals detail.ID 
    select new { master.MyDateTime, details }) 
    .ToLookup(pair => pair.MyDateTime, pair => pair.details); 

(nie ma potrzeby używać Distinct i zauważ użycie połączenia zamiast drugiej klauzuli from i where).

+1

Gdzie używać słownika i gdzie jest LookUp jon? –

+3

@EhsanSajjad: Użyj słownika do mapowania "klucz do pojedynczej wartości" i odnośnika do mapowania "klucz do wielu wartości" (gdy jesteś zapytaniem, wyszukiwanie jest niezmienne, więc nie możesz go używać, gdy jesteś mutowanie kolekcji). –

Powiązane problemy