我有一个问题,这个查询试图从同一个孩子得到一个和一个值
1级
class Project{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<SubProject> SubProjects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
2级
class SubProject{
public int Id { get; set; }
public string Description { get; set; }
public IEnumerable<Week> Weeks { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
3级
class Week{
public int Week { get; set; }
public int Hours { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在一个范围内的所有周,在这样的新类列表中获得一个项目
class ProjectOverview{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<ProjectWeekOverview> Weeks { get; set; }
}
class ProjectWeekOverview{
public int Week { get; set; }
public int TotalHours { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过类似的东西,但是如果我今天所做的甚至是正确的话
List<Project> projects = { List.Of.Projects };
List<ProjectOverview> overview = projects
.Select(p => new ProjectOverview
{
Id = p.Id,
Name = p.Name,
Weeks = p
.SubProjects
.Select(sp => new ProjectWeekOverview
{
Week = ????,
TotalHours = sp
.Where(w => w.Week >= 30 && w.Week <= 35)
.Sum(w => w.Hours)
})
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
编辑:一个子项目可以包含多个周项目,如同一周一样,用于存储不同操作的小时数
week { week = 10, hours = 3 }
week { week = 10, hours = 4 }
week { week = 11, hours = 3 }
Run Code Online (Sandbox Code Playgroud)
所以我想要的是将周属性设置为一周,并将总小时数与该周的所有小时数相加
您需要GroupBy周,并将Week作为键,Sum作为项目.
试一试.输出是匿名类型,必须将其转换为您想要的任何类型的结果.它是重要的分组.
List<Project> projects = null;
var weeksAndHours = projects
.Select(p => new
{
Id = p.Id,
Name = p.Name,
Weeks = p
.SubProjects.SelectMany(sp => sp.Weeks)
.Where(w => w.Week >= 30 && w.Week <= 35)
.GroupBy(w => w.Week)
.Select(g => new { week = g.Key, hours = g.Sum( w=> w.Hours) })
});
Run Code Online (Sandbox Code Playgroud)