0

レポートのリストを使用して作業しているレポート ソフトウェアがあります。当社のインターフェースの 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
- --ケース---
ケース
---ケース

4

2 に答える 2

0

最初に GroupBy を実行する必要があります

var flatList = Model.results.GroupBy(r => r.PersonId)
                            .Select(group => new { Group = group.Key, Results = group.SelectMany(x => x.Projects) });

探しているものを正確に返さない可能性があるため、クエリを微調整する必要があるかもしれませんが、アイデアを得る必要があります。Select のグループ パラメータは、一意の PersonId のすべてのエンティティのサブ コレクションです。

于 2012-10-03T01:37:42.767 に答える
0
var flatlist = from r in Model.Reports
               from p in r.Results
               from c in p.Projects
               group c by p.PersonId
               into grp;
               select grp;

多分?あなたが何を望んでいるのか正確にはわかりません。これにより、個人 ID でグループ化された ReportProjectRow のリストが作成されます。

「すべてのレポートを 1 つのレポートにグループ化したいと考えています。この 1 つのレポートで、すべての人を自分のプロジェクトと取り組んでいるケースに統合したいと考えています。」

これにより、すべてのレポートが取得され、それらのレポート内のすべての人が検索され、それらすべての人からすべてのプロジェクトが検索され、プロジェクトが個人 ID でグループ化されます。そこから、必要に応じて情報を操作できます。

于 2012-10-03T01:20:43.000 に答える