我有一个报告软件,我一直在使用报告列表。在我们的一个界面上,可以显示多个时间段。每份报告都有 1 天的时间范围,对于每个时间段,我们每天都会提取一份报告并将它们添加到报告列表中。这导致了很多用于计算数字的混乱代码,我正在尝试重构它。
我遇到了 lambda 表达式或 linq 查询的问题。我想将所有报告组合成一个报告。在这个单一的报告中,我希望所有人都与他们的项目和案例合并。
class TimeReport : Report // Report handles basic stuff like time generated, start/end //date ect.
{
public List<ReportPersonRow> results;
// more methods below for handling other report details
}
class ReportPersonRow
{
public long PersonId {get;set;}
public string PersonName {get;set;}
public List<ReportProjectRow> Projects {get;set;}
// more methods below for handling other details
}
class ReportProjectRow
{
public long ProjectId{get;set;}
public string ProjectName{get;set;}
public List<ReportProjectCaseRow> Projects {get;set;}
// more methods below for handling other details
}
class ReportProjectCaseRow
{
public long CaseId{get;set;}
public string CaseName{get;set;}
public string HoursLogged{get;set;}
// more methods below for handling other details
}
我最初和其他各种人甚至试图去任何地方,但我迷失了前进的方向,或者我什至应该这样做。
var flatList = Model.Reports.SelectMany(x => x.Results).GroupBy(x => x.PersonId);
下面是数据当前的样子和我想要实现的示例。
报告
-person
--project
---case
--project
---case
---case
---case
--project
---case
---case
-person
--project
---case
--project
-- -case
---case
---case
--project
---case
---case
报告
-person
--project
---case
--project
---case
---case
---case
--project
---case
---case
-person
--project
---case
--project
-- -case
---case
---case
--project
---case
---case
最终结果将是(所有以前的报告合并为 1)
报告
-person
--project
---case
---case
---case
---case
--project
---case
---case
---case
--project
---case
---case
-- -case
---case
---case
-person
--project
---case
---case
---case
--project
---case
---case
---case
--project
---case
- --案例---
案例
---案例