我遇到此查询的问题,试图从同一个孩子中获取一个和一个值
第1类
class Project{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<SubProject> SubProjects { get; set; }
}
第2类
class SubProject{
public int Id { get; set; }
public string Description { get; set; }
public IEnumerable<Week> Weeks { get; set; }
}
第3类
class Week{
public int Week { get; set; }
public int Hours { get; set; }
}
我正在尝试做的是在一个范围内的所有周,在一个新的类列表中获得一个项目
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; }
}
我已经尝试过类似的东西,但我也无法在本周获得它,如果我在这方面所做的甚至是正确的
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();
任何可以帮助解决这个问题的人?
修改:一个子项目可以包含多个星期项目,如同一周一样,用于存储不同行动的小时数
week { week = 10, hours = 3 }
week { week = 10, hours = 4 }
week { week = 11, hours = 3 }
所以我想要的是将周属性设置为一周,以及总周小时为该周所有小时数的总和
答案 0 :(得分:5)
您需要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) })
});