2015-09-13 92 views
0

要進行假期計算,我必須從存儲庫中爲一年和多個國家及其州加載節假日。字典作爲查找值

爲了在我需要檢查日期是否爲節假日的邏輯中獲得良好性能,我試圖將列表轉換爲使用.ToLookup擴展名與字典作爲值的查找。

此字典將具有狀態作爲鍵和HashSet作爲該狀態的值。

我試圖使用Lookup,Dictionary和HashSet來創建它,以便通過使用Country和State對其進行過濾來快速達到假日信息。

以下是代碼:

var CountryStateHolidayLookup = holidays.ToLookup(x => x.Country, 
      x => (
     new Dictionary<int, HashSet<Holiday>>() 
       { { x.State, 
        new HashSet<Holiday>() 
        { new Holiday(
         x.HolidayDate.Date, x.IsWeekend) 
        } 
       } } 
     ) 
     ); 

在上面的代碼輸出我得到的國家代碼查詢,該查詢的值即將字典的枚舉,每個假期作爲一個新的字典。

,而我期待一個字典,所有項目作爲一個HashSet的

我知道我在這裏做錯了什麼,什麼樣的變化我有什麼關係?

回答

1

我認爲你有它倒退。查找可以被認爲是一個多值字典。你會希望國家關鍵的國家查找。

你可能想是這樣的:

var CountryStateHolidayLookup = holidays.GroupBy(h => h.Country) 
    .ToDictionary(
     g => g.Key, 
     g => g.ToLookup(
      h => h.State, 
      h => new Holiday(h.HolidayDate.Date, h.IsWeekend) 
     ) 
    );