gpt4 book ai didi

c# - 使用 C# linq,如何按数组中的特定项目进行分组?

转载 作者:行者123 更新时间:2023-12-02 21:50:41 25 4
gpt4 key购买 nike

我有一个 Project 对象数组。

IEnumerable<Project> projects = GetProjects();

每个项目都有一个名为“Applications”的属性,它是一个字符串数组。

IEnumerable<string> applicationsForProject = project.Applications();

一些项目有 1 个应用程序(数组中的 1 个元素),但其他项目有很多。

我想按单个应用程序对所有项目进行分组,以便我可以生成如下所示的 View :

  • 应用 1:10 个项目
  • 应用 2:4 个项目
  • 应用 3:5 个项目

如果我这样做:

var projectsByApp = projects.GroupBy(r=>r.Applications);

这不会按不同的应用程序而是按列表进行分组,因此我最终会在 View 中获得重复的行(因为项目 1 可能有 App1 和应用程序 2,而项目 2 可能只有应用程序 2)

是否有更好的方法在项目数组中按不同的应用程序名称进行分组?

最佳答案

var projectsByApp = projects.SelectMany(p => p.Applications
.Select(a => new { p, a }))
.GroupBy(x => x.a)
.Select(g => new {
Application = g.Key,
Projects = g.Select(x => p).ToList())
})
.ToList();

或者更容易阅读:

var projectsByApp = (from p in projects
from a in p.Applications
group p by a into g
select new {
Application= g.Key,
Projects = g.ToList()
}).ToList();

两个查询都返回具有两个属性的匿名类型对象的列表:Application输入为ApplicationProjectsList<Project>

关于c# - 使用 C# linq,如何按数组中的特定项目进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com