Obtener datos usando la unión interna de Dapper

c# dapper micro-orm orm

Pregunta

Estoy trabajando en operaciones de base de datos en un proyecto y desarrollo la aplicación WinForms C # y estoy usando Dapper para obtener datos de DB, estoy atascado en una situación en la que necesito recuperar datos mediante la unión interna. P.ej. Tengo dos tablas Autores y Libro como sigue:

public class Authors
{
    public int AuthorId { get; set; }
    public string AuthorName { get; set; }
}
public class Book
{
    public int BookId { get; set; }
    public string AuthorId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int Price { get; set; }
}

Ahora, en SQL Server, puedo obtener los datos fácilmente mediante la siguiente consulta:

select B.Title,b.Description,b.Price,A.AuthorName from author A inner join book B on A.AuthorId = B.Authorid

Pero no sé cómo hacer esto con el mapeo múltiple de dapper, también vi artículos como This pero no pude entender cómo funciona y cómo dividirlos. Seré genial si consigo las mismas soluciones con mis diseños de clase. Gracias.

Esta es la salida que quiero: ResultSet

Respuesta aceptada

Con el resultado que ha vinculado, puede hacer esto:

public class Result
{
    public string Title { get; set; }
    public string Description { get; set; }
    public int Price { get; set; }
    public string AuthorName { get; set; }
}

connection.Query<Result>("SELECT B.Title,B.Description,B.Price,A.AuthorName FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid");

O puede usar un tipo dinámico.

Si quieres tener una colección de libros con sus autores, es otra historia. Entonces harías esto (seleccionando * por el bien del ejemplo):

var sql = "SELECT * FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid";
var result = connection.Query<Book, Author, Book>(sql,
(b, a) => { b.Author = a; return b; }, splitOn: "AuthorId");

El parámetro splitOn debe entenderse de la siguiente manera: si todas las columnas se organizan de izquierda a derecha en el orden de la consulta, los valores de la izquierda pertenecen a la primera clase y los valores de la derecha pertenecen a la segunda clase.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué