Search code examples
c#listforeachienumerableobservablecollection

Access items in list pertaining to GroupBy() item


I am instantiating a List, derived from an ObservableCollection:

var paidTrips = PaidTrips
    .GroupBy(p => new {p.LicenseHolderID})
    .ToList();

Which, through a foreach loop, gives me access to the various distinct values in LicenseHolderID.

foreach (var licenseHolder in paidTrips) {
    // accessing the string value of LicenseHolderID
    // but no access to the other items
}

What I need help with:

How can I obtain access to the other items in paidTrips, which pertain to LicenseHolderID? (Why: I am creating invoices, one per LicenseHolderID, and I am building the invoice with the data from all the other collection properties).

To give some context, here's the full collection I am working with:

PaidTrips.Add(new PaidTrip {

    LicenseHolderID = dr[0].ToString(),
    VehicleID = dr[1].ToString(),
    Year = dr[2].ToString(),
    Month = dr[3].ToString(),
    Payment = (decimal)dr[4],
    PaymentNet = (decimal)dr[5],
    OrderFee = (decimal)dr[6],
    PaymentFee = (decimal)dr[7],
    TripVATcode = (decimal)dr[8],
    LicenseHolderInvoiceID = dr[9].ToString(),
    TripFeeNet = (decimal)dr[10],
    TripFeeVATcode = (decimal)dr[11],
    RidelRegionInvoiceID = dr[12].ToString(),
});

Solution

  • It does depend what your looking to do with the data for each invoice? are you looking to summarise the data within each LicenseHolderID group?

    var PaidTrips = new List<PaidTrip>();
    
    var paidTrips = PaidTrips
        .GroupBy(p => new { p.LicenseHolderID })
        .ToList();
    
    foreach (var group in paidTrips)
    {
        var licenseHolderID = group.Key.LicenseHolderID;
        
        //ie here total payment (This sums all payments for this LicenseHolderID)
        var totalPayment = group.Sum(x => x.Payment)
    
       // count of payments made (This Counts all Payments greater than 0)
       var totalPayments = group.Count(x => x.Payment > 0)
    
       //Use variables in your invoice generation
      
    }
    

    or as above iterate through each group item and access it in singular form.