0

要进行假期计算,我必须从存储库中加载一年以及多个国家及其州的假期。

为了在需要检查日期是否为假日的逻辑中获得良好的性能,我尝试使用 .ToLookup 扩展名将列表转换为查找,并将字典作为其值。

该字典将 State 作为键,并将该状态的 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 的字典

我知道我在这里做错了什么,我必须做些什么改变?

4

1 回答 1

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)
        )
    );
于 2015-09-13T23:33:41.363 回答