-1

私はEFモデルに従いました:

ここに画像の説明を入力してください

次のビューでデータを取得したい:

ここに画像の説明を入力してください

データエンティティでは、時間はミリ秒単位のタイムスパンです。結果として、PlaceInStepはによってメンバー間に配置されStepIdます。

この難しいクエリを作成する方法は?

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

2 に答える 2

3

最初にアドバイス。クエリで 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))
            });
于 2012-11-21T10:42:54.977 に答える
1

これを試して:

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))
                           });
于 2012-11-21T11:00:25.140 に答える