2015-09-22 9 views
5

miei dati è come sotto in due tabelleLINQ to dizionario con chiave e una lista

Master Columns 
ID MyDateTime 
1  07 Sept 
2  08 Sept 

colonna MyDateTime al precedente ha indice univoco

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

voglio popolare questo in un dizionario. Ho provato

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

mi aspetto due file nel dizionario

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

ho un errore in cui si lamenta la chiave del dizionario è entrato due volte. La chiave sarebbe il datetime che è unica nel master

risposta

10

Questo è precisamente ciò che le ricerche sono per - in modo da utilizzare al posto di ToLookupToDictionary:

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

(Non dovrebbe essere necessario usare Distinct, e la nota l'uso di un join invece di un secondo from e una clausola where.)

+1

Dove utilizzare il dizionario e dove LookUp jon? –

+3

@EhsanSajjad: utilizzare un dizionario per una mappatura "chiave per valore singolo" e una ricerca per mappatura "chiave su più valori" (quando si esegue una query, la ricerca è immutabile, quindi non è possibile utilizzarla quando si è mutando la collezione). –