1

We have 2 tables

  1. tbl_members In this table we have all members details like memberId, name, age, etc

  2. tbl_payment In this table we have all their payment details like paymentId, memberId, PaymentDate, etc

We want to select all of our user's names and display only their last paymentDate and Amount

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

How can this be done using linq?

diceguyd30
  • 2,742
  • 20
  • 18
Moksha
  • 1,030
  • 6
  • 17
  • 38

2 Answers2

0

You should use grouping to group payments by user and then select top element by its PaymentDate. Take a look at that question: Linq - Top value form each group.

tbl_payment.GroupBy(p => p.memberId).Select(g => g.Order(p => p.PaymentDate).First())
Community
  • 1
  • 1
MarcinJuraszek
  • 124,003
  • 15
  • 196
  • 263
0

Something like:

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 }) 
Gert Arnold
  • 105,341
  • 31
  • 202
  • 291