Skip to content

Instantly share code, notes, and snippets.

@SamSaffron
Created September 18, 2011 23:43
Show Gist options
  • Save SamSaffron/1225723 to your computer and use it in GitHub Desktop.
Save SamSaffron/1225723 to your computer and use it in GitHub Desktop.
multi map
cnn.QueryMultiple<Table<Order>,Table<OrderLine>,Order>(
@"select * from Orders
select * from OrderLine", (orders, lines) =>
{
var map = lines.ToDictionary(line => line.OrderId);
foreach(var order in orders)
{
order.Lines = map[o.Id];
yield return order;
}
});
// another option, infer Table for single:
cnn.QueryMultiple<Table<Order,User>,OrderLine,Order>(
@"select * from Orders
left join Users u on u.Id = OwnerId
select * from OrderLine", (orders, lines) =>
{
var map = lines.ToDictionary(line => line.OrderId);
foreach(var order in orders.Map((o,u) => {o.Owner = u; return o;}))
{
order.Lines = map[o.Id];
yield return order;
}
});
// Same code today
grid = cnn.QueryMultiple(
@"select * from Orders
left join Users u on u.Id = OwnerId
select * from OrderLine");
var orders = grid.Read<Order,User,Order>((o,u) => {o.Owner = u; return o;}).ToList();
var map = grid.Read<OrderLine>().ToDictionary(line => line.OrderId);
foreach(var order in orders)
{
order.Lines = map[order.Id];
}
@jcolebrand
Copy link

@JasonPunyon isn't he trying to avoid chaining in his revision?

@JasonPunyon
Copy link

@jcolebrand: He hasn't told me so I wouldn't know. I just followed a tweet here :)

@jcolebrand
Copy link

@JasonPunyon me too! ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment