将对象数组转换为对象字典

时间:2010-09-04 18:46:31

标签: c# collections dictionary

我有一系列事件:

IEnumerable<CalendarEvent> events

我想将其转换为字典,所以我尝试了这个:

   Dictionary<string, CalendarEvent> dict = events.ToDictionary(r => r.Date.ToString("MMM dd, yyyy"));

问题是我在一个日期有多个事件,所以我需要一种方法将其转换为

Dictionary<string, List<CalendarEvent>> 

支持有多个事件的日子

1 个答案:

答案 0 :(得分:3)

您可以改用ToLookup

var lookup = events.ToLookup(r => r.Date.ToString("MMM dd, yyyy"));

当您为查找编制索引时,您会获得所有匹配结果的可枚举,因此在该示例中,lookup["Sep 04, 2010"]会为您提供IEnumerable<CalendarEvent>。如果没有匹配的结果,您将得到一个空的枚举而不是KeyNotFoundException。

你也可以使用GroupBy然后使用ToDictionary:

Dictionary<string, List<CalendarEvent>> dict = events
    .GroupBy(r => r.Date.ToString("MMM dd, yyyy"))
    .ToDictionary(group => group.Key, group => group.ToList());