Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Linq到实体-对多对多表使用group by_Asp.net_Vb.net_Linq_Entity Framework - Fatal编程技术网

Asp.net Linq到实体-对多对多表使用group by

Asp.net Linq到实体-对多对多表使用group by,asp.net,vb.net,linq,entity-framework,Asp.net,Vb.net,Linq,Entity Framework,如果您能为我的申请确定使用Linq到实体的正确方式,我将不胜感激。具体来说,在处理多个多对多表时,我很难理解分组 简化的数据库设计是: DB设计理念: 人员:有权编辑多个统计信息的个人。 季节:按分组统计数据的时间段,例如2012年棒球或2012年。 参与者:参与统计的个人或群体。这里需要的只是实体的名称。比如Kevin Wasie或大学队 统计信息:保存属于一个赛季的个人统计信息,如触地得分或本垒打 代码隐藏: Dim stats = From st In pl.statistics

如果您能为我的申请确定使用Linq到实体的正确方式,我将不胜感激。具体来说,在处理多个多对多表时,我很难理解分组

简化的数据库设计是:

DB设计理念:

人员:有权编辑多个统计信息的个人。 季节:按分组统计数据的时间段,例如2012年棒球或2012年。 参与者:参与统计的个人或群体。这里需要的只是实体的名称。比如Kevin Wasie或大学队 统计信息:保存属于一个赛季的个人统计信息,如触地得分或本垒打

代码隐藏:

    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
Season 1
   Statistic 2
      Season1 Players
Season 1
   Statistic 3
      Season1 Players
Season 2
   Statistic 4
      Season 2 Players
...
如何修改linq以获得期望的结果

任何帮助,包括教程或其他信息的链接,都将不胜感激。提前谢谢你

下面是C#代码,但我希望它能提示您需要做什么。 查询过滤具有给定
Id
的人员,并使用
SelectMany()
选择这些人员的统计信息

然后,它根据
seasureid
对所选统计数据进行分组,并填充要输出的季节集合

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

现在的结果是什么。无论如何,db结构看起来不太好。人和玩家之间应该有直接的关系。现在的结果是:季节1/统计1/季节1玩家>季节1/统计2/季节1玩家。。。我希望它是季节1/统计1/季节1层>统计2/季节1层,等等。。。DB设计:球员和人是两个不同的东西:球员可以是个人,也可以是团队,所以球员表所需要的只是该赛季所涉及实体的名称。人员表是可以访问多个统计信息进行编辑的个人。我在实际设计中有一个人口统计表来保存人口统计数据,但为了简单起见,我把它放在这里了。谢谢!还有一个警告:我正在尝试访问玩家的列,比如
code
Key.Players=s.[Select](函数(k)新增了{Key.PlayerName=s.seasure.Player.Name
code
这不起作用,因为我得到错误:“重载解析失败,因为无法使用这些参数调用可访问的'Select'”您知道如何解决这个问题吗?
Select
方法可以应用于集合。
s
是单个项。
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
                               })
             });