Я предполагаю, что ваша хранимая процедура выглядит примерно так
SELECT u.Id, u.Name, a.UserId, a.Street FROM Users u JOIN Addresses a on u.Id = a.UserId
В этом случае вы можете вызвать хранимую процедуру и установить элементы списка адресов следующим образом
Dictionary<int, User> users = new Dictionary<int, User();
var result = connection.Query<User, Address, User>(spName, ((u, a) =>
{
if (!users.ContainsKey(u.Id))
{
users.Add(u.Id, u);
u.Addresses = new List<Address>();
}
User k = users[b.Id];
k.Addresses.Add(a);
return u;
}, splitOn:"UserId", commandType:CommandType.StoredProcedure);
* 1006 Итак, что здесь происходит? Лямбда-выражение в методе Query получает два объекта (A User и Address), извлеченных Dapper из возвращенных данных SP и разделенных в поле UserId, как указано в параметре splitOn.
Затем lambda проверяет, есть ли пользователь с этим Id внутри словаря и, если нет, добавляет пользователя с его ключом, не забывая инициализировать список адресов.
После if лямбда возвращает пользователя из словаря и добавляет экземпляр адреса, наконец возвращает Пользовательский объект получен в качестве входного параметра. Когда Dapper заканчивает перечислять результаты, возвращается IEnumerable с данными Address на месте.