Como mapeio várias listas com o dapper

Eu tenho três classes Usuário, Pedido e Projeto, que são armazenadas em tabelas únicas. Os pedidos e os projetos têm uma relação n: n com os usuários. Para implementar isso, eu tenho duas tabelas cruzadas (UserOrders, UserProjects) que mapeiam essas relações.

public class User
{
  public string UserID {get;set;}
  public List<string> Orders{get;set;}
  public List<string> Projects {get;set;}
}

public class Order
{
  public string OrderID {get;set}
  ...
}

public class Project
{
  public string ProjectID {get;set}
  ...
}

Como você pode ver, o objeto Usuário contém uma lista de todos os orderID / projectID relacionados.

Agora eu quero consultar isso com o Dapper. Eu tenho essa solução que funciona muito bem com1 Lista. Mas se eu tentar consultar o objeto de usuário completo para a 2ª lista, todos os resultados serão multiplicados pelo número de resultados na primeira lista. Portanto, se um usuário tiver 3 pedidos e 2 projetos, a lista de pedidos ficará bem e a lista de projetos conterá os dois projetos três vezes:

var lookup = new Dictionary<string, User>();
var multi = dbDapperFM.Query<User, string, string, User>("SELECT u.*, uo.OrderID, up.ProjectID "+
        "FROM User u INNER JOIN UserOrders uo ON u.UserID=uo.UserID "+
        "INNER JOIN UserProjects up ON u.UserID=up.UserID", (u, uo, up) =>
    {
      User user;
      if (!lookup.TryGetValue(m.UserID, out user))
          lookup.Add(u.UserID, user= u);

      if (user.Orders == null)
          user.Orders = new List<string>();
      user.Orders.Add(uo);

      if (user.Projects == null)
          user.Projects = new List<string>();
      user.Projects.Add(up);
      return user;
    }, splitOn: "UserID , OrderID, ProjectID ").AsQueryable();

Entendo por que esse problema ocorre (2 junções internas), mas não entendo como resolvê-lo.

questionAnswers(1)

yourAnswerToTheQuestion