Utilisation de la liste dynamique d'objets dans les requêtes de jointure dapper

c# dapper

Question

Est-il possible de créer la requête dapper écrite ci-dessous avec returntype comme IEnumerable<dynamic> car je n'ai pas POCO Product & Supplier.

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;
                            }); 

Que se passerait-il si ma requête SQL était comme ci-dessous? Comment ma requête dapper serait-elle avec returntype de IEnumerable<dynamic>

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

Toute aide est sincèrement appréciée.

Merci

Réponse acceptée

Oui, vous pouvez mapper le résultat de vos requêtes sur une liste d'objets dynamiques (documentation ici ).

    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);

Dans votre premier exemple, vous effectuez un mappage multiple qui mappe chaque ligne de tableau sur 2 objets au lieu d'un seul ( Product et Supplier ) qui sont ensuite liés par référence avant le retour du produit. Je ne pense pas que vous pourriez faire cela avec des objets dynamiques, car Dapper n'aurait aucun moyen de savoir comment diviser les colonnes entre eux. Vous pouvez le confirmer avec un test, en remplaçant les paramètres génériques <Product, Supplier, Product> par <dynamic, dynamic, dynamic> .

Ignorer le mappage multiple signifierait simplement que les objets dynamic renvoyés contiendraient à la fois des propriétés de Product et de Supplier , ce qui pourrait ne pas être un problème pour vous.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi