Usar una lista dinámica de objetos en las consultas de combinación de dapper

c# dapper

Pregunta

¿Es posible crear la consulta de dapper escrita a continuación con returntype como IEnumerable<dynamic> ya que no tengo POCO de producto y proveedor.

IEnumerable<Product> products = sqlConnection
                    .Query<Product, Supplier, Product>(
                        @"select Products.*, Suppliers.* 
                          from Products join Suppliers 
                               on Products.SupplierId = Suppliers.Id
                               and suppliers.Id = 2",
                        (a, s) =>
                            {
                                a.Supplier = s;
                                return a;
                            }); 

¿Qué ocurre si mi consulta SQL es algo como el siguiente, cómo sería mi consulta dapper con returntype de IEnumerable<dynamic>

select Products.ProductId,Products.ProductName,Products.ProductCategory, ProductPrice.Amount,ProductPrice.Currency
                              from Products join ProductPrice 
                                   on Products.ProductId = ProductPrice.ProductId

Toda la ayuda es sinceramente apreciada.

Gracias

Respuesta aceptada

Sí, puede asignar el resultado de sus consultas a una lista de objetos dinámicos (documentación aquí ).

    const string sql = @"select Products.ProductId, Products.ProductName, Products.ProductCategory, ProductPrice.Amount, ProductPrice.Currency
                        from Products join ProductPrice 
                        on Products.ProductId = ProductPrice.ProductId";

    IEnumerable<dynamic> products = sqlConnection.Query(sql);

En su primer ejemplo, está haciendo una asignación múltiple que mapea cada fila de la tabla en 2 objetos en lugar de uno ( Product y Supplier ) que luego se vinculan por referencia antes de que se devuelva el producto. No creo que puedas hacer esto con objetos dinámicos, porque Dapper no tendría forma de saber cómo dividir las columnas entre ellos. Puede confirmar esto con una prueba, reemplazando los parámetros genéricos <Product, Supplier, Product> por <dynamic, dynamic, dynamic> .

Saltarse el mapeo múltiple significaría que los objetos dynamic devueltos contendrían las propiedades del Product y del Supplier , lo que podría no ser un problema para usted.



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é