从结果与LINQ总和时间跨度,群组以及加入 [英] Results from LINQ with SUM for TimeSpan, GROUP and JOIN

查看:152
本文介绍了从结果与LINQ总和时间跨度,群组以及加入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我下面的EF模型:





我想在下面的视图数据:





在数据实体的时间是时间跨度与毫秒。在结果 PlaceInStep 成员之间发生由 StepId



如何让这个又硬查询?



修改1



我的一些代码:

  VAR的查询=从ctx.Data 
数据加入成员ctx.Members
上data.MemberId等于member.MemberId
在ctx.Teams
加入队member.TeamId等于team.TeamId
组成员由member.TeamId为G
选择新{TeamId = g.Key,TeamName = G。选择(T => t.Teams.TeamName),TOTALTIME = ???};


解决方案

在第一个忠告。你不应该使用加入查询。您有导航属性模型,用它们来代替。您可以阅读克雷格斯顿茨的博文一下吧。



您可以选择有关内部列表成员的所有团队和信息。尝试了这一点:

  VAR的查询= ctx.data.ToList()排序依据(D => d.Time)。 
GROUPBY(D => d.Members.StepId)。
的SelectMany(G => g.Select((D,地点)=>新建{时间= d.Time,成员= d.Members,PlaceInStep = +地方1}))。
GROUPBY(D => d.Members.TeamId)。
选择(G =>新建
{
TeamId = g.Key,
名称= g.Select(D => d.Members.Teams.TeamName)。首先(),
成员= g.Select(D =>新建{时间= d.Time,PlaceInStep = d.PlaceInStep,MemberName = d.Members.MemberName}),
TOTALTIME = g.Aggregate (新的TimeSpan(),(总和,nextData)=> sum.Add(nextData.Time))
});


I've following EF model:

I want to get data in following view:

In Data entity Time is Timespan with milliseconds. In result, PlaceInStep is place between members by StepId.

How to make this hard query?

Edit 1:

My some code:

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 = ???};

解决方案

Advice at first. You should not use join in your queries. You have your model with navigation properties, use them instead. You can read Craig Stuntz's blogpost about it.

You can select all teams and information about members in inner list. Try this out:

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))
            });

这篇关于从结果与LINQ总和时间跨度,群组以及加入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆