从每个用户的详细信息表中选择最后一行

时间:2012-02-22 19:35:56

标签: sql-server linq

我们有2张桌子

  1. tbl_members 在此表中,我们拥有所有成员详细信息,如memberId,name,age等

  2. tbl_payment 在此表中,我们提供了所有付款详细信息,如paymentId,memberId,PaymentDate等

  3. 我们希望选择所有用户名,并仅显示其上一次付款日期和金额

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

    如何使用linq完成此操作?

2 个答案:

答案 0 :(得分:0)

您应该使用分组按用户对付款进行分组,然后通过PaymentDate选择top元素。看看这个问题:Linq - Top value form each group

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

答案 1 :(得分:0)

类似的东西:

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