2014-02-11 21 views
0

我對C#轉換工作的字典查詢:如何在C#LINQ將字典轉換爲查詢後重新組織鍵?

public class myClass 
{ 
    public int my_id; 
    public Dictionary<string, Dictionary<string, string[]>> myDict; 
} 

Dictionary<string, myClass> dataDict; 


var queryDict = (from happen in dataDict 
     group happen by happen.Value.my_id into g select g) 
     .ToDictionary(g => g.Key, g => g.ToDictionary(x => x.Key, x => x.Value)); 

我需要循環的QueryDict的每一個元素。

在進行查詢之前,對於相同的dataDict鍵,可能有多個myClass具有相同的event_id。

查詢後,對於相同的happen.Value.my_id,dataDict的原始鍵是如何組織的?他們是一個event_id指向的列表?

任何幫助,將不勝感激!

回答

1

基本上group by給你一個IGrouping<TKey, TElement>其是IEnumerable<TElement>IGrouping Interface),所以具有以下查詢:

from happen in dataDict group happen by happen.Value.my_id into g select g 

手段,則組由happen.Value.my_id,所以TKeymy_idTElement將是一個KeyValuePair<string, MyClass>>這是你的字典的項目。由於上述查詢的結果IGrouping<int, KeyValuePait<stirng, MyClass>>實際上是IEnumerable<keyValuePair<string, MyClass>>,所以對於每個密鑰,實際上都有一個IEnumerable<KeyValuePair<string, MyClass>>。正如你在這裏看到的那樣,你的字典中的元素就像它們一樣。 查詢的第二部分只是將IEnumerable<IGrouping<int, Dictionary<string, MyClass>>>轉換爲Dictionary<int, Dictionary<string, MyClass>>>,所以沒什麼大不了的。

1

實際上,您的dataDict是一個KeyValuePair(1維數組)的數組。並且您的查詢添加了另一個維度,因此它變成DictionariesDictionary。但是增加另一個維度只是一個新密鑰的一組舊元素。

這是更好地說明它是這樣的: enter image description here

+0

所以分組查詢後,一個鍵可以與列表(或數組)的字典相關聯?謝謝 !例如,<1,,>,它使用「1」作爲鍵,我可以得到一個字典列表,對不對?如何訪問相關的? – user2420472