LINQ Group By成一个字典对象

我正在尝试使用LINQ从List<CustomObject>创build一个Dictionary<string, List<CustomObject>> List<CustomObject> 。 我可以得到这个工作使用“var”,但我不想使用匿名types。 这是我的

 var x = (from CustomObject o in ListOfCustomObjects group o by o.PropertyName into t select t.ToList()); 

我也曾尝试从LINQ库中使用Cast<>() ,但是我得到编译问题的效果是一个无效的强制转换。

 Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects .GroupBy(o => o.PropertyName) .ToDictionary(g => g.Key, g => g.ToList()); 

我不能评论@迈克尔布莱克本,但我想你得到了downvote,因为在这种情况下GroupBy是没有必要的。

像这样使用它:

 var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName); var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName] 

另外,我已经看到这个方法比使用GroupBy()ToDictionary()更好。

对于@ atari2600,这就是在lambda语法中使用ToLookup的答案:

 var x = listOfCustomObjects .GroupBy(o => o.PropertyName) .ToLookup(customObject => customObject);` 

基本上,它需要IGrouping并将其实现为一个列表字典,以PropertyName的值为关键字。