首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表分组- Lambda或Linq

列表分组- Lambda或Linq
EN

Stack Overflow用户
提问于 2012-10-03 08:52:11
回答 2查看 2.3K关注 0票数 0

我有一个报告软件,我一直在处理一系列的报告。在我们的一个界面上,可以显示多个时间段。每个报告的时间范围为1天,对于每个时间段,我们提取出每天的报告,并将其添加到报告列表中。这导致了大量计算数字的混乱代码,我正在尝试重构它。

我遇到了lambda表达式或linq查询的问题。我想将所有报告分组到一个报告中。在这个单一的报告中,我希望所有的人都与他们的项目和案件合并在一起。

代码语言:javascript
复制
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
}

我最初是从和其他人开始的,甚至尝试着去任何地方,但我迷失了方向,或者我是否应该这样做。

代码语言:javascript
复制
 var flatList = Model.Reports.SelectMany(x => x.Results).GroupBy(x => x.PersonId);

下面是一个数据当前外观的示例,以及我希望实现的目标。

报告

-person

--项目

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

-person

--项目

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

报告

-person

--项目

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

-person

--项目

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

最终结果将是(所有以前的报告合并为1)

报告

-person

--项目

-案例

-案例

-案例

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

-案例

-案例

-案例

-person

--项目

-案例

-案例

-案例

--项目

-案例

-案例

-案例

--项目

-案例

-案例

-案例

-案例

EN

回答 2

Stack Overflow用户

发布于 2012-10-03 09:20:43

代码语言:javascript
复制
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;

也许吧?我不太确定你到底想要什么。这将创建按person id分组的ReportProjectRow的列表。

“我希望将所有报告组合成一份报告。在这份报告中,我希望所有人都能合并到他们正在处理的项目和案例中。”

这将获得所有的报告,找到这些报告中的所有人,找到所有这些人的所有项目,然后将项目分组到个人in下。从那里,您可以随心所欲地操作信息。

票数 0
EN

Stack Overflow用户

发布于 2012-10-03 09:37:43

你需要先做GroupBy

代码语言:javascript
复制
var flatList = Model.results.GroupBy(r => r.PersonId)
                            .Select(group => new { Group = group.Key, Results = group.SelectMany(x => x.Projects) });

您可能需要调整查询,因为它可能不会完全返回您正在寻找的内容,但您应该明白这一点。选择的组参数是唯一PersonId的所有实体的子集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12700528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档