我有一个报告软件,我一直在处理一系列的报告。在我们的一个界面上,可以显示多个时间段。每个报告的时间范围为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
--项目
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
-person
--项目
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
报告
-person
--项目
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
-person
--项目
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
最终结果将是(所有以前的报告合并为1)
报告
-person
--项目
-案例
-案例
-案例
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
-案例
-案例
-案例
-person
--项目
-案例
-案例
-案例
--项目
-案例
-案例
-案例
--项目
-案例
-案例
-案例
-案例
发布于 2012-10-03 09:20:43
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下。从那里,您可以随心所欲地操作信息。
发布于 2012-10-03 09:37:43
你需要先做GroupBy
var flatList = Model.results.GroupBy(r => r.PersonId)
.Select(group => new { Group = group.Key, Results = group.SelectMany(x => x.Projects) });您可能需要调整查询,因为它可能不会完全返回您正在寻找的内容,但您应该明白这一点。选择的组参数是唯一PersonId的所有实体的子集。
https://stackoverflow.com/questions/12700528
复制相似问题