要进行假期计算,我必须从存储库加载假期一年,以及多个国家及其州。
为了在我需要检查日期是否是假日的逻辑中获得良好的性能,我正在尝试使用.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)
}
} }
)
);
在上面代码的输出中,我得到一个带有国家代码的Lookup,这个查找的值是一个可枚举的Dictionary,每个假日都是一个新词典。
而我期待一个包含所有项目的字典作为一个HashSet
我知道我在这里做错了什么,我必须做些什么改变?
答案 0 :(得分: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)
)
);