Linq

2015-09-22 20 views
5

Benim Yukarıdaki veriler bir sözlükte bu doldurmak istiyorumLinq

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

benzersiz bir dizin içinde

Master Columns 
ID MyDateTime 
1  07 Sept 
2  08 Sept 

MyDateTime sütun iki tablo

yılında altında gibidir anahtarı ve bir liste ile Sözlüğe. Ben iki kez girilen sözlüğün anahtarının şikayetçi nerede bir hata alıyorum sözlüğe

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

içinde iki sıra bekliyoruz

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

çalıştılar. Anahtar ustası Bu tam da

cevap

10

tektir datetime olacağını bunun içindir aramaları - yani ToLookup yerine ToDictionary kullanın:

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

(Sen Distinct kullanmak gerekir ve olmamalıdır not ikinci bir from ve bir where yan tümcesi yerine birleşim kullanımı.)

+1

Sözlük nerede ve nerede LookUp jon kullanılır? –

+3

@EhsanSajjad: "Tek anahtardan diğerine anahtar" eşleştirmesi için bir sözlük ve "birden çok değerin anahtarı" eşlemesi için bir arama kullanın (sorguladığınızda; Arama değişkendir, bu nedenle bunu kullanamazsınız) koleksiyonu mutasyona sokmak). –