I am trying to create a function that creates one (1) PDF-invoice for each *distinct* value of a property in a `List` I am looping through (using [PDFSharp](http://www.pdfsharp.net/?AspxAutoDetectCookieSupport=1)).

I grab the value of the `string`, and want to use it as header of the invoices (it's the name of the business getting invoiced).

To illustrate:
In the following table, I would like to get the value of LicenseHolder1 (once), LicenseHolder2 (once) and LicenseHolder3 (once).

| ID | LicenseHolderID | Value1 | Value2 | Value3 |
| --- | --- | --- | --- | --- |
| 1 | LicenseHolder1 | 66 | 44 | UF-2107 |
| 2 | LicenseHolder2 | 22 | 25 | UF-2107 |
| 3 | LicenseHolder2 | 62 | 24 | UF-2107 |
| 4 | LicenseHolder3 | 82 | 12 | UF-2107 |
| 5 | LicenseHolder3 | 6 | 77 | UF-2107 |
| 6 | LicenseHolder3 | 15 | 62 | UF-2107 |

This is the method I am using:

```
using (SqlConnection con = new(ConnectionString.connectionString))
using (SqlCommand cmd = new("spCreateInvoice", con) {CommandType = CommandType.StoredProcedure})
using (SqlDataAdapter da = new(cmd))
// this is the name of my SQL table
using (DataTable dt = new("tblTripsPerMonth")) 
using (DataSet ds = new()) {

    con.Open();
    da.Fill(dt);
    ds.Tables.Add(dt);

    /* adding the SQL table rows to my ObservableCollection (PaidTrips), 
    which is bound to properties in my holder class (PaidTrip): */

    foreach (DataRow dr in ds.Tables[0].Rows {

       PaidTrips.Add(new PaidTrip {

             LicenseHolderID = dr[0].ToString(),
             Value1 = (decimal)dr[1],
             Value2 = (decimal)dr[2],
             Value3 = dr[3].ToString(),
        });

        // Now I am instantiating a list, so that I can group
        List<PaidTrip> paidTrip = PaidTrips
            .GroupBy(p => new {p.LicenseHolderID})
            .Select(g => g.First())
            .ToList();

        // this is copied code from another question, and this is where I fall of
        foreach (PaidTrip PaidTrips in paidTrip) {

            foreach (var LicenseHolderID in PaidTrips.GetType().GetProperties()) {

                string n = LicenseHolderID.GetValue(PaidTrips).ToString();

```

If I after this grab `string n` and pass it into, let's say, a `MessageBox.Show`, it displays `LicenseHolder1`, as it should.
But, if I try to pass it into the PDF, like this...
(continued from last code-block)

```
                System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
                PdfDocument pdf = new();
                PdfPage page = pdf.AddPage();
                XGraphics gfx = XGraphics.FromPdfPage(page);

                // drawing in the string value
                gfx.DrawString(n, new XFont("Arial", 40, XFontStyle.Bold), myColor, new XPoint(40, 250));

                // saving the PDF
                pdf.Save("C:\File\Path\TestPDF.pdf");
            }
        }
    }
}

```

...the PDF is created, but the string I drew is not filled with `LicenseHolder1`, but rather, with (seemingly) random values of the other columns (like `66`, `UF-2107` or `77`). How come?

*(Oh, and I know that this code only creates one (1) PDF-file, I need several (one for each distinct value in the `LicenseHolderID` column -- but that's an issue for another day)*