the - ¿Resultado simple de unión interna con Dapper?
the voice ganadores 2018 (1)
Puedes hacer algo como esto (ver https://www.tritac.com/blog/dappernet-by-example ):
public class Shop {
public int? Id {get;set;}
public string Name {get;set;}
public string Url {get;set;}
public IList<Account> Accounts {get;set;}
}
public class Account {
public int? Id {get;set;}
public string Name {get;set;}
public string Address {get;set;}
public string Country {get;set;}
public int ShopId {get;set;}
}
var lookup = new Dictionary<int, Shop>()
conn.Query<Shop, Account, Shop>(@"
SELECT s.*, a.*
FROM Shop s
INNER JOIN Account a ON s.ShopId = a.ShopId
", (s, a) => {
Shop shop;
if (!lookup.TryGetValue(s.Id, out shop)) {
lookup.Add(s.Id, shop = s);
}
if (shop.Accounts == null)
shop.Accounts = new List<Account>();
shop.Accounts.Add(a);
return shop;
}
).AsQueryable();
var resultList = lookup.Values;
Parece que no puedo encontrar documentación o ejemplos para mi problema (he estado buscando un tiempo ahora). Creo que mi problema es bastante sencillo, así que aquí va.
Tengo dos mesas. Mi tabla principal se llama Personas y la tabla secundaria es PersonEntries. Para cada persona en la tabla Persona, puedo tener 0 o más entradas en la tabla PersonEntries. Me gusta esto.
Table: Person
Id
Name
Table: PersonEntry
PersonId
CheckinTime
CheckoutTime
Tengo dos objetos como este
public class Person {
public string Name;
public List<PersonEntry> PersonEntries;
}
public class PersonEntry {
public DateTime CheckinTime;
public DateTime CheckoutTime;
}
Si tuviera que obtenerlo de la base de datos en mis clases de c #, ¿cómo lo haría? Puedo asignar una sola tabla a mi clase c # y hacerlo para cada tabla, pero luego me queda para hacer coincidir las entradas que se asignan a cada persona.
He visto varios ejemplos de mapeo de ONE PersonEntry a ONE Person, el problema aquí es que tengo una relación de cero a muchos. Mi persona tiene una lista de elementos PersonEntry.