2015-09-22 65 views
5

我的數據是在兩個表LINQ到密鑰和一個列表字典

Master Columns 
ID MyDateTime 
1  07 Sept 
2  08 Sept 

MyDatetime列在上面有

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

我想在字典來填充這個唯一索引。我曾嘗試

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

我期望在字典

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

兩行我得到一個錯誤在那裏抱怨字典的鍵輸入兩次。關鍵是這是在主

回答

10

這恰恰是唯一的日期時間是什麼查找了 - 所以使用ToLookup代替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); 

(你不應該需要使用Distinct,並注意使用連接代替第二個fromwhere子句。)

+1

在哪裏可以使用字典和LookUp jon? –

+3

@EhsanSajjad:使用字典作爲「單值鍵映射」映射,以及查找「多值鍵映射」映射(當您查詢時;查找是不可變的,所以當您無法使用時改變集合)。 –

相關問題