来自LINQ的结果,包括用于TimeSpan,GROUP和JOIN的SUM

我遵循EF模型:

在此处输入图像描述

我想在以下视图中获取数据:

在此处输入图像描述

在数据实体中,Time是Timespan,以毫秒为单位。 结果, PlaceInStepStepId放置在成员之间。

如何进行这个难题?

编辑1

我的一些代码:

 var query = from data in ctx.Data join member in ctx.Members on data.MemberId equals member.MemberId join team in ctx.Teams on member.TeamId equals team.TeamId group member by member.TeamId into g select new {TeamId = g.Key, TeamName = g.Select(t=>t.Teams.TeamName), TotalTime = ???}; 

建议一开始。 您不应该在查询中使用join。 您的模型具有导航属性,请改用它们。 你可以阅读Craig Stuntz关于它的博文。

您可以在内部列表中选择所有团队和有关成员的信息。 试试这个:

 var query = ctx.data.ToList().OrderBy(d => d.Time). GroupBy(d => d.Members.StepId). SelectMany(g => g.Select((d, place) => new { Time = d.Time, Members = d.Members, PlaceInStep = place + 1 })). GroupBy(d => d.Members.TeamId). Select(g => new { TeamId = g.Key, Name = g.Select(d => d.Members.Teams.TeamName).First(), Members = g.Select(d => new {Time = d.Time, PlaceInStep = d.PlaceInStep, MemberName = d.Members.MemberName}), TotalTime = g.Aggregate(new TimeSpan(), (sum, nextData) => sum.Add(nextData.Time)) }); 

试试这个:

 var query = ctx.Data.Join(ctx.Members, d => d.MemberId, m => m.MemberId, (d,m)=>new {data=d, member = m}) .Join(ctx.Teams, dm=>dm.member.TeamId, t=>t.TeamId, (dm, t)=>new{data=dm.data, member=dm.member, team = t}) .GroupBy(dmt=>new {dmt.team.TeamId, dmt.team.TeamName}) .Select(g=>new { TeamId = g.Key.TeamId, TeamName = g.Key.TeamName, TotalTime = g.Aggregate(0, (sum, gr)=>sum.Add(gr.data.Time)) });