字典作为查找值

时间:2015-09-13 23:14:33

标签: c# linq ienumerable igrouping

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

为了在我需要检查日期是否是假日的逻辑中获得良好的性能,我正在尝试使用.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

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

1 个答案:

答案 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)
        )
    );
相关问题