【问题标题】:select last row from details table for each user从每个用户的详细信息表中选择最后一行
【发布时间】:2012-02-23 05:37:49
【问题描述】:

我们有两张桌子

  1. tbl_members 在此表中,我们有所有成员的详细信息,例如 memberId、姓名、年龄等

  2. tbl_payment 在此表中,我们有他们所有的付款详细信息,例如 paymentId、memberId、PaymentDate 等

我们希望选择所有用户的姓名并仅显示他们的最后一次付款日期和金额

Name   PaymentDate   Amount
----------------------------
Row1   12/12/2011    1200
Row2   12/18/2011    100
Row3   12/16/2011    99
Row4   12/08/2011    1500

如何使用 linq 做到这一点?

【问题讨论】:

    标签: sql-server linq


    【解决方案1】:

    类似:

    Members.Select(c => new 
    { 
      Member = m, 
      LastPayment = m.Payments.OrderByDescending(p => p.PaymentDate).FirstOrDefault()
    })
    .Select(x => new { x.Member.Name, x.LastPayment.PaymentDate, x.Payment.Amount }) 
    

    【讨论】:

      【解决方案2】:

      您应该使用分组按用户分组付款,然后按其 PaymentDate 选择顶部元素。看看那个问题:Linq - Top value form each group

      tbl_payment.GroupBy(p => p.memberId).Select(g => g.Order(p => p.PaymentDate).First())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-08
        • 2021-04-16
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        • 1970-01-01
        • 2022-11-15
        相关资源
        最近更新 更多