【问题标题】:LINQ: Inner join to the First row in a sub query?LINQ:子查询中第一行的内部连接?
【发布时间】:2011-02-16 14:51:30
【问题描述】:

我有两个班级,基本上一个是会员,另一个是会议。

它们通过一个名为“名称”的公共字段连接在一起。有一个成员,但可以有多个会话。

因此,如果我进行标准加入,我会获得 1 个成员和许多会话。我只想取回第一行会话。

会话具有名为 SessioEndTime 的字段。所以我需要通过 DESC 排序来挑选第一条记录。

这是我的 linq;我的退货太多了。我想我需要一个子查询,但我有点困惑。

  var sessions = from m in this.members 
                   join s in this.sessions
                   on m.Name equals s.Name
                   select new { MemberName = m.Name, SessionTime = s.SessioEndTime};

编辑

为了清楚起见,假设我有五个成员,每个成员都有 NUMEROUS 会话。我只希望接收我的五个成员,但每个成员只有一个会话,该会话是可以从 SessioEndTime 获得的最新会话。

【问题讨论】:

    标签: linq linq-to-sql linq-to-objects


    【解决方案1】:

    试试这个:

    var sessions =  
        from m in this.members                     
        join s in 
        (
            from se in this.sessions
            group se by se.Name into g
            select new {Name = g.Key, SessioEndTime = g.Max(a=>a.SessioEndTime)}
        )   
        on m.Name equals s.Name                    
        select new { MemberName = m.Name, SessionTime = s.SessioEndTime}
    

    【讨论】:

    • 谢谢 Cyber​​nate,可能解释不正确..我会更新问题...但基本上我正在寻找每个成员只有 1 个会话的每个成员..您建议的代码返回1 次会议只有 1 名成员。但我的收藏中还有 4 名成员。
    • 我认为我需要有一个子查询,但我不确定......所以连接只针对从子查询获得的 1 条记录??
    • 我喜欢加入子查询。我不断地想起 LINQ 的灵活性以及查询可以像您需要的那样复杂这一事实。在您进行编辑之前,我已经为您 +1,但感谢您提醒我可以做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多