如何访问 GroupBy() 在方法调用语法中返回的 IEnumerable<IGrouping<TKey, TElement>>



使用Linq的GroupBy()方法,返回IEnumerable<IGrouping<TKey, TElement>>类型

此时,我想在方法调用语法中使用Select()返回一个匹配TElementTKey的匿名类型。

这是我们在这个问题中使用的数据。

public class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Pet> pets = new List<Pet>
{ 
new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } 
};

我可以通过在下面的methodCallSyntax中嵌套foreach来实现我想要的。

var methodCallSyntax = pets.GroupBy(pet => pet.Age, pet => pet.Name);
foreach (var grouping in methodCallSyntax)
{
foreach (var element in grouping)
{
Console.WriteLine($"Key: {grouping.Key}, Element: {element}");
}
}

但是我只想使用一次foreach

var methodCallSyntax =
pets
.GroupBy(pet => pet.Age, pet => pet.Name)
// .Select(grouping => new {grouping.Key, Element = grouping.});
foreach (var item in methodCallSyntax)
{
Console.WriteLine($"Key: {item.Key}, Element: {item.Element}");
}

但是正如你所看到的,我不知道该怎么填写Select()

我该怎么做?

可以在GroupBy之后使用SelectMany,并在SelectMany中使用Select。

SelectMany将多维集合转换为单个序列。内部Select将返回一个集合,而SelectMany将把Select中的所有值转换成一个集合。

var all = pets
.GroupBy(pet => pet.Age, pet => pet.Name)
.SelectMany(group => group
.Select(name => new { key = group.Key, value = name })
);

使用

foreach (var item in all)
{
Console.WriteLine($"Key: {item.key}, Element: {item.value}");
}

相关内容

  • 没有找到相关文章

最新更新