Usually with Dapper two classes (and in your case I may get this wrong as I not sure how the relations are setup in the database) the query uses a join, then for Dapper see spliton.
Example
I have a contact model and a ContactDevices model, to get data the SELECT statement. In my case I created the models using a tool.
SELECT C.ContactId,
C.FirstName,
C.LastName,
C.ContactTypeIdentifier,
CT.ContactTitle,
CD.id AS DeviceId,
CD.ContactId,
CD.PhoneTypeIdentifier,
CD.PhoneNumber,
CT.ContactTypeIdentifier
FROM dbo.Contacts AS C
INNER JOIN dbo.ContactType AS CT
ON C.ContactTypeIdentifier = CT.ContactTypeIdentifier
INNER JOIN dbo.ContactDevices AS CD
ON C.ContactId = CD.ContactId;;
Then in code (SQL.ContactsWithDevices points to the statement above) we get each contact with one or more contact devices. My code is a tad more complex e.g. there is more to contact devices e.g. types of devices and locations.
public static async Task<List<Contacts>> GetContactsAndDevices()
{
await using SqlConnection cn = new(ConnectionString());
var list = cn.Query<Contacts, ContactDevices, Contacts>(
SQL.ContactsWithDevices(), (contact, contactDevices) =>
{
contact.ContactDevices.Add(contactDevices);
return contact;
}, splitOn: "ContactId,DeviceId");
return list.ToList();
}