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的值为关键字。