首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Linq将IGrouping<T、K>映射到IGrouping<T、V>?

如何使用Linq将IGrouping<T、K>映射到IGrouping<T、V>?
EN

Stack Overflow用户
提问于 2021-01-06 18:43:16
回答 1查看 42关注 0票数 1

我有一个带有一些属性的样例对象

代码语言:javascript
运行
复制
public class MyObject
{
    public string Foo { get; set; }
    public string Bar { get; set; }
}

我在一个集合上使用了GroupBy Linq方法,现在有了一个IEnumerable<IGrouping<string, MyObject>>。我希望通过从对象类中选择IGrouping<string, string>来将每个组映射为myObject.Foo + myObject.Bar类型。因此,最终结果将是IEnumerable<IGrouping<string, string>>

我试着从Select开始

代码语言:javascript
运行
复制
IEnumerable<IGrouping<string, MyObject>> oldCollection = null;
IEnumerable<IGrouping<string, string>> newCollection = oldCollection
    .Select(oldGroup =>
    {
        IGrouping<string, string> newGroup = null;

        // pick the key from the oldGroup via oldGroup.Key

        // map the values from oldGroup to strings, sample code:
        // newGroup.Values = oldGroup.Select(myObject => myObject.Foo + myObject.Bar);

        return newGroup;
    });

如何在该语句中将oldGroup映射到newGroup

EN

Stack Overflow用户

回答已采纳

发布于 2021-01-06 18:55:47

如果您只是想对所有内容进行重新组合,那么解决方案就是“展开”分组(使用.SelectMany),然后对其进行“重新组合”。

代码语言:javascript
运行
复制
var regrouped = grouped
    .SelectMany(x => x, (x, y) => new { x.Key, Sum = y.Foo + y.Bar })
    .GroupBy(x => x.Key, x => x.Sum);

显然,也许您可以简单地“正确”地构建分组?

代码语言:javascript
运行
复制
var grouped = collection.GroupBy(x => x.Foo, x => new { x.Foo + x.Bar });

这里有一个重载的.GroupBy,第二个参数设置每个组元素的“内容”。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65594289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档