レポートのリストを使用して作業しているレポート ソフトウェアがあります。当社のインターフェースの 1 つで、複数の期間を表示することができます。各レポートには 1 日の期間があり、期間ごとに 1 日ごとにレポートを取得し、レポートのリストに追加します。これにより、数字を計算する際に多くの厄介なコードが発生し、これをリファクタリングしようとしています。
ラムダ式または linq クエリに問題があります。すべてのレポートを 1 つのレポートにまとめたいと考えています。この 1 つのレポートで、すべての関係者のプロジェクトとケースを統合してほしいと思います。
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);
データが現在どのように見えるか、および私が達成したいことの例を以下に示します。
report
-person
--project
---case
--project
---case
---case
---case
--project
---case
---case
-person
--project
---case
--project
-- -case
---case
---case
--project
---case
---case
report
-person
--project
---case
--project
---case
---case
---case
--project
---case
---case
-person
--project
---case
--project
-- -case
---case
---case
--project
---case
---case
最終結果は次のようになります (以前のすべてのレポートが 1 にマージされます)。
report
-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
- --ケース---
ケース
---ケース