1

アプリケーションにLinqtoEntitiesを利用する適切な方法を決定するための支援をいただければ幸いです。具体的には、複数の多対多のテーブルを操作する場合、グループ化を理解するのが困難です。

簡略化されたデータベース設計は次のとおりです。

http://imageshack.us/a/img443/5863/entitydesignerdiagram.png

DBデザインコンセプト:

人:複数の統計を編集するためのアクセス権を持つ個々の人。シーズン:2012年の野球や2012年など、統計をグループ化する期間。プレーヤー:統計に関与する個人またはグループ。ここで必要なのは、エンティティの名前だけです。Kevin Wasie、またはVarsity Team Statisticsなど:タッチダウンやホームランなど、1シーズンに属する個々の統計情報を保持します。

コードビハインド:

    Dim stats = From st In pl.statistics From per In st.people
      Where per.id.Equals(personID)
      Select New With
            {.season_name = st.season.name, .statistic_name = st.name, .season_id = st.season.id,
             .players = From play In pl.players
                             Where play.seasonId = st.season.id
                             Select New With {.player_name = play.name}}

    rep_statistics.DataSource = stats
    rep_statistics.DataBind()

.aspx:

<asp:Repeater ID="rep_actions" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<b><%# Eval("season_name")%></b> - <%# Eval("statistic_name")%><br />
    <asp:Repeater ID="rep_part" runat="server" DataSource='<%# Eval("players")%>'>
    <itemtemplate>
    <%# Eval("participantname")%>
    </itemtemplate>
    <SeparatorTemplate>,</SeparatorTemplate>
    </asp:Repeater>
</ItemTemplate>
</asp:Repeater>

望ましい結果は、ページをシーズンごとにグループ化して表示することです。

Season 1
   Statistic 1
      Season1 Players
   Statistic 2
      Season1 Players
   Statistic 3
      Season1 Players
Season 2
   Statistic 4
      Season 2 Players
...

現在の結果は次のとおりです。

Season 1
   Statistic 1
      Season1 Players
Season 1
   Statistic 2
      Season1 Players
Season 1
   Statistic 3
      Season1 Players
Season 2
   Statistic 4
      Season 2 Players
...

linqを変更して目的の結果を得るにはどうすればよいですか?

チュートリアルやその他の情報へのリンクを含む、あらゆる支援をいただければ幸いです。前もって感謝します!

4

1 に答える 1

3

以下は C# のコードですが、何をする必要があるかについてのヒントになれば幸いです。クエリは、指定された人をフィルター処理し、それらの人の統計を選択するためにId使用します。SelectMany()

その後、選択した統計を次の基準でグループ化し、SeasonId出力する季節のコレクションに入力します。

var data = st.People
             .Where(p => p.Id == personID)
             .SelectMany(p => p.Statistics)
             .GroupBy(s => s.SeasonId)
             .Select(g => new
             {
                 SeasonId = g.Key,
                 SeasonName = g.Fist().Season.Name,
                 Statistics = g.Select(s => new
                               {
                                   StatisticId = s.Id,
                                   StatisticName = s.Name,
                                   Players = s.Season.Players
                               })
             });
于 2012-11-18T20:06:22.480 に答える