I'd use linq group by to do the mapping. sample with pubs authors and titles. AuthorModel has a Titles List:
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
var sql = @"
select a.au_id, a.au_fname, a.au_lname, t.title_id, t.title
from authors a
join titleauthor ta on ta.au_id = a.au_id
join titles t on ta.title_id = t.title_id
";
var cmd = new SqlCommand(sql,conn);
var reader = await cmd.ExecuteReaderAsync();
var list = new List<QueryAuthorModel>();
// map query to query model
while(await reader.ReadAsync())
{
list.Add(new QueryAuthorModel
{
au_id = reader.GetString(0),
au_fname = reader.GetString(1),
au_lname = reader.GetString(2),
title_id = reader.GetString(3),
title = reader.GetString(4)
});
}
// list of authors where each author has a list of titles
var r = list.GroupBy(
row => row.au_id,
row => row,
(key, rows) => rows.Select(row => new AuthorModel
{
Id = key,
FirstName = row.au_fname,
LastName = row.au_fname,
Titles = rows.Select(row => new TitleModel
{
Id = row.title_id,
Title = row.title
}).ToList()
}).First()
).ToList();
}