2015-09-22 11 views
5

Meine Daten Wörterbuch sind wie unter in zwei TabellenLinq mit Schlüssel und einer Liste

Master Columns 
ID MyDateTime 
1  07 Sept 
2  08 Sept 

MyDateTime Spalte oben in eindeutigen Index

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

ich das in einem Wörterbuch will füllen hat. Ich habe versucht,

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

ich zwei Reihen im Wörterbuch erwarten

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

ich einen Fehler, wo es über den Schlüssel des Wörterbuchs beschwert sich zweimal eingegeben. Der Schlüssel würde die Datetime sein, die in dem Master ist einzigartig

Antwort

10

Dies ist genau das, was Lookups sind für - so ToLookup anstelle von 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); 

(Sie sollen nicht brauchen Distinct zu verwenden, und Mitteilungs die Verwendung einer Verbindung anstelle einer zweiten from und eine where Klausel.)

+1

Wo Wörterbuch und wo LookUp Jon verwenden? –

+3

@EhsanSajjad: Verwenden Sie ein Wörterbuch für ein "Schlüssel zu Einzelwert" -Mapping und ein Nachschlagen nach "Schlüssel zu Mehrfachwert" -Mapping (wenn Sie abfragen; Suche ist unveränderlich, so dass Sie es nicht verwenden können, wenn Sie es sind mutieren die Sammlung). –

Verwandte Themen