LINQ Group By into Dictionary Object

时间:2011-06-15 17:39:18

标签: linq dictionary

我正在尝试使用LINQ从Dictionary<string, List<CustomObject>>创建List<CustomObject>。我可以使用“var”来使用它,但我不想使用匿名类型。这就是我所拥有的

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

我有Cast<>()后,我也尝试使用LINQ库中的x,但是我遇到编译问题,因为它是无效的强制转换。

4 个答案:

答案 0 :(得分:303)

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

答案 1 :(得分:14)

我不能评论@Michael Blackburn,但我猜你得到了downvote,因为在这种情况下GroupBy不是必需的。

使用它像:

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

此外,我已经看到这种方式比使用GroupBy()更好.ToDictionary()。

答案 2 :(得分:-1)

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

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

基本上,它采用IGrouping并将它具体化为列表,使用PropertyName的值作为键。

答案 3 :(得分:-1)

以下内容对我有用。

test(convert) :- convert(foot, 2,  inch,  24.0).
test(convert) :- convert(foot, 6,  yard,   2.0).
test(convert) :- convert(chain, 2, foot, 132.0).